01 路由跳轉(zhuǎn)四種方式
1. router-link
1. 不帶參數(shù)
<router-link :to="{name:'home'}">
<router-link :to="{path:'/home'}"> //name,path都行, 建議用name
// 注意:router-link中鏈接如果是'/'開始就是從根路由開始永丝,如果開始不帶'/'抹凳,則從當(dāng)前路由開始冻记。
2.帶參數(shù)
<router-link :to="{name:'home', params: {id:1}}">
//類似post
<router-link :to="{name:'home', query: {id:1}}">
//類似 get
2. this.$router.push()
1. 不帶參數(shù)
this.$router.push('/home')
this.$router.push({name:'home'})
this.$router.push({path:'/home'})
2. query傳參
this.$router.push({name:'home',query: {id:'1'}})
this.$router.push({path:'/home',query: {id:'1'}})
// html 取參 $route.query.id
// script 取參 this.$route.query.id
3. params傳參
this.$router.push({name:'home',params: {id:'1'}}) // 只能用 name
// 路由配置 path: "/home/:id" 或者 path: "/home:id" ,
// 不配置path ,第一次可請求,刷新頁面id會消失
// 配置path,刷新頁面id會保留
// html 取參 $route.params.id
// script 取參 this.$route.params.id
4. query和params區(qū)別
query類似 get, 跳轉(zhuǎn)之后頁面 url后面會拼接參數(shù),類似?id=1, 非重要性的可以這樣傳, 密碼之類還是用params刷新頁面id還在
params類似 post, 跳轉(zhuǎn)之后頁面 url后面不會拼接參數(shù) , 但是刷新頁面id 會消失
3. this.$router.replace() 用法同上push
但是瀏覽器不會記錄步驟
4. this.$router.go(n) 向前或者向后跳轉(zhuǎn)n個頁面碎浇,n可為正整數(shù)或負(fù)整數(shù)
02 組件內(nèi)的守衛(wèi)
- beforeRouteEnter 不能 訪問 this
beforeRouteEnter (to, from, next) {
next(vm => {
// 通過 `vm` 訪問組件實例
})
}
- beforeRouteUpdate (2.2 新增)
- beforeRouteLeave
03 路由獨享的守衛(wèi)
你可以在路由配置上直接定義 beforeEnter
守衛(wèi):
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
04 完整的導(dǎo)航解析流程
- 導(dǎo)航被觸發(fā)材原。
- 在失活的組件里調(diào)用
beforeRouteLeave
守衛(wèi)窿侈。 - 調(diào)用全局的
beforeEach
守衛(wèi)念秧。 - 在重用的組件里調(diào)用
beforeRouteUpdate
守衛(wèi) (2.2+)见间。 - 在路由配置里調(diào)用
beforeEnter
聊闯。 - 解析異步路由組件。
- 在被激活的組件里調(diào)用
beforeRouteEnter
米诉。 - 調(diào)用全局的
beforeResolve
守衛(wèi) (2.5+)菱蔬。 - 導(dǎo)航被確認(rèn)。
- 調(diào)用全局的
afterEach
鉤子。 - 觸發(fā)
DOM
更新拴泌。 - 調(diào)用
beforeRouteEnter
守衛(wèi)中傳給next
的回調(diào)函數(shù)魏身,創(chuàng)建好的組件實例會作為回調(diào)函數(shù)的參數(shù)傳入。