vue-router 路由配置的四個方法

?? 前端路由的特點:

??優(yōu)點:
用戶體驗好,不需要每次都從服務器全部獲取饱须,可以快速展現給用戶抑诸。
??缺點:
?? 不利于SEO薪伏。
?? 使用瀏覽器的前進后退時回重新發(fā)送請求滚澜,沒有合理地利用緩存。
?? 單頁面無法記住之前滾動的位置毅该,無法在前進博秫、后退的時候記住滾動的位置潦牛。

?? vue-router的基本使用

資料原文
路由其實就是“指向”的意思眶掌,當我點擊頁面上的home按鈕時,頁面上就要顯示出home的內容巴碗,如果點擊頁面上的about按鈕朴爬,頁面上就要顯示出about的內容。點擊之后橡淆,怎么做到正確的對應召噩,比如母赵,我點擊home按鈕,頁面上怎么正好能顯示home的內容具滴。這就要在js文件中配置路由凹嘲。

路由中有三個基本概念:route,routes,router

1?? route:它是一條路由,由這個英文單詞也可以看出來构韵,它是單數周蹭。Home按鈕 => home內容, 這是一條route疲恢;about按鈕 => about 內容凶朗, 這是另一條route。

2?? routes:routes 是一組路由显拳,把上面的每一條路由組合起來棚愤,形成一個數組。[{home 按鈕 =>home內容 }杂数, { about按鈕 => about 內容}]

3?? router:router 是一個機制宛畦,相當于一個管理者,它來管理路由揍移。因為routes 只是定義了一組路由刃永,它放在哪里是靜止的,當真正來了請求羊精,怎么辦斯够? 就是當用戶點擊home 按鈕的時候,怎么辦喧锦?這時router 就起作用了读规,它到routes 中去查找,去找到對應的 home 內容燃少,所以頁面中就顯示了 home 內容束亏。

4?? 客戶端中的路由,實際上就是dom 元素的顯示和隱藏阵具。當頁面中顯示home 內容的時候碍遍,about 中的內容全部隱藏,反之也是一樣阳液∨戮矗客戶端路由有兩種實現方式:基于hash 和基于html5 history api.

?? vue-router路由兩種實現途徑

在vue中實現路由還是相對簡單的。因為我們頁面中所有內容都是組件化的帘皿,我們只要把路徑和組件對應起來就可以了东跪,然后在頁面中把組件渲染出來。

1??頁面實現(html模版中)

在vue-router中, 我們看到它定義了兩個標簽<router-link> 和<router-view>來對應點擊和顯示部分。<router-link> 就是定義頁面中點擊的部分虽填,<router-view> 定義顯示部分丁恭,就是點擊后,區(qū)配的內容顯示在什么地方斋日。所以 <router-link> 還有一個非常重要的屬性 to牲览,定義點擊之后,要到哪里去恶守, 如:<router-link to="/home">Home</router-link>

2??js 中配置路由

首先要定義route, 一條路由的實現竭恬。它是一個對象,由兩個部分組成: path和component. path 指路徑熬的,component 指的是組件痊硕。如:{path:’/home’, component: home}
我們這里有兩條路由,組成一個routes:

const routes = [
  { path: '/home', component: Home },
  { path: '/about', component: About }
]

最后創(chuàng)建router 對路由進行管理押框,它是由構造函數 new vueRouter() 創(chuàng)建岔绸,接受routes 參數。

const router = new VueRouter({
      routes // routes: routes 的簡寫
})

配置完成后橡伞,把router 實例注入到 vue 根實例中,就可以使用路由了盒揉。

const app = new Vue({
  router
}).$mount('#app')

執(zhí)行過程:當用戶點擊 router-link 標簽時,會去尋找它的 to 屬性兑徘, 它的 to 屬性和 js 中配置的路徑{ path: '/home', component: Home} path 一一對應刚盈,從而找到了匹配的組件, 最后把組件渲染到 <router-view> 標簽所在的地方挂脑。所有的這些實現才是基于hash 實現的藕漱。

?? 動態(tài)路由

上面我們定義的路由,都是嚴格匹配的崭闲,只有router-link 中的to屬性和 js 中一條路由route中 path 一模一樣肋联,才能顯示相應的組件component. 但有時現實卻不是這樣的,當我們去訪問網站并登錄成功后刁俭,它會顯示 歡迎你+ 你的名字橄仍。不同的用戶登錄, 只是顯示“你的名字” 部分不同牍戚,其它部分是一樣的侮繁。

我們經常需要把某種模式匹配到的所有路由,全部映射到同一個組件如孝。例如宪哩,有一個User組件,對于所有ID各不相同的用戶暑竟,都要用這個組件來渲染斋射。那么育勺,我們可以在vue-router的路由路徑中使用【動態(tài)路徑參數】但荤。

當使用路由參數時罗岖,例如從/user/foo導航到/user/bar,原來的組件實例會被復用腹躁。因為兩個路由都渲染同一個組件桑包,比起銷毀再創(chuàng)建,復用則顯得更加高效纺非。這也意味著組件的生命周期鉤子不會再被調用哑了。
例如:

const User = {
    template: '<div>User</div>
}

const router = new VueRouter({
    routes: [
        // 動態(tài)路徑參數,以冒號開頭
        { path: '/user/:id', component: User }
    ]
})

?? 嵌套路由

嵌套路由烧颖,主要是由我們的頁面結構所決定的弱左。當我們進入到home頁面的時候,它下面還有分類炕淮,如手機系列拆火,平板系列,電腦系列涂圆。當我們點擊各個分類的時候们镜,它還是需要路由到各個部分,如點擊手機润歉,它肯定到對應到手機的部分模狭。

在路由的設計上,首先進入到 home ,然后才能進入到phone, tablet, computer. Phone, tablet, compute 就相當于進入到了home的子元素踩衩。所以vue 提供了childrens 屬性嚼鹉,它也是一組路由,相當于我們所寫的routes。
例如:

const routes = [
    {
        path:"/home",
     // 下面這個屬性也不少驱富,因為反砌,我們是先進入home頁面,才能進入子路由
        component: home,
     // 子路由
        children: [
            {
                path: "phone",
                component: phone
            },
            {
                path: "tablet",
                component: tablet
            },
            {
                path: "computer",
                component: computer
            }
        ]
    }
];
?? 命名路由

命名路由萌朱,很簡單宴树,因為根據名字就可以知道,這個路由有一個名字晶疼,那就直接給這個路由加一個name 屬性酒贬,就可以了。 給user 路由加一個name 屬性:

{
        path: "/user/:id",
        name: "user",
        component: user
}

命名路由的使用, 在router-link 中to 屬性就可以使用對象了,

 <router-link to="/user/123">User123</router-link> // 和下面等價 
 <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>  
 // 當使用對象作為路由的時候翠霍,to前面要加一個冒號,表示on-bind綁定锭吨,否則會被當成對象
?? 編程式路由

除了使用< router-link >創(chuàng)建a標簽來定義導航鏈接,還可以借助router的實例方法寒匙,通過編寫代碼實現零如。

想要導航到不同的URL,則使用router.push方法躏将。這個方法會向history棧添加一個新紀錄,所以考蕾,當用戶點擊瀏覽器后退按鈕時祸憋,則回到之前的URL.

當點擊< router-link >時,這個方法會在內部調用肖卧,所以說蚯窥,點擊< router-link :to=”…”>等同于調用router.push(…)

語法 this.$router.history.push('要跳轉路由的地址'),push里面的參數有三種寫法塞帐,如下:

<script>
    export default {
        methods:{
            toCart(){
                //this.$router.push("/carts");
                //this.$router.push({path:"/carts"});
                this.$router.push({path:"/carts?a=123"});
            }
        }
    }
</script>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拦赠,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子葵姥,更是在濱河造成了極大的恐慌荷鼠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榔幸,死亡現場離奇詭異允乐,居然都是意外死亡,警方通過查閱死者的電腦和手機牡辽,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門喳篇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人态辛,你說我怎么就攤上這事麸澜。” “怎么了奏黑?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵炊邦,是天一觀的道長。 經常有香客問我熟史,道長馁害,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任蹂匹,我火速辦了婚禮碘菜,結果婚禮上,老公的妹妹穿的比我還像新娘限寞。我一直安慰自己忍啸,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布履植。 她就那樣靜靜地躺著计雌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玫霎。 梳的紋絲不亂的頭發(fā)上凿滤,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天妈橄,我揣著相機與錄音,去河邊找鬼翁脆。 笑死眷蚓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的鹃祖。 我是一名探鬼主播溪椎,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼普舆,長吁一口氣:“原來是場噩夢啊……” “哼恬口!你這毒婦竟也來了?” 一聲冷哼從身側響起沼侣,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤祖能,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛾洛,有當地人在樹林里發(fā)現了一具尸體养铸,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年轧膘,在試婚紗的時候發(fā)現自己被綠了钞螟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡谎碍,死狀恐怖鳞滨,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蟆淀,我是刑警寧澤拯啦,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站熔任,受9級特大地震影響褒链,放射性物質發(fā)生泄漏。R本人自食惡果不足惜疑苔,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一甫匹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惦费,春花似錦兵迅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至后雷,卻和暖如春季惯,著一層夾襖步出監(jiān)牢的瞬間吠各,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工勉抓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贾漏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓藕筋,卻偏偏與公主長得像纵散,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隐圾,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容