上一篇咱們學習了vue-router的基礎,包括基礎標籤和基礎配置,這一篇文章,咱們將會來學習路由的幾個高級特性。讓咱們開始吧。html
路由守衛是由多個檢測函數和鉤子函數組成的一連串的自定義邏輯。vue
全局守衛設置:vue-router
咱們來看一段代碼:數組
import Vue from 'vue'
import Router from 'vue-router'
import router from './router'
Vue.use(Router)
const route = new Router({
...router
})
const logging = false;
route.beforeEach((to, from, next) => {
if( to.name !== "logging" ){
if( !logging ) next( { name: 'logging' } )
else next();
}
else {
if( logging ) next( { name: 'home' } )
else next();
}
})
export default route
複製代碼
這是一段設置登錄過濾的代碼,只是簡單的模擬一下。當沒有登錄的時候將會跳轉到名稱爲logging的界面,當登錄了以後若是是須要跳轉登錄界面則轉換當前跳轉路徑到home頁面,不然則直接跳轉。bash
代碼伺候:dom
route.afterEach((to, from) => {
console.log(to);
console.log(from);
console.log(arguments);
console.log("afterEach");
})
複製代碼
路由守衛設置:異步
代碼伺候:函數
routes: [
{
path: '/',
name: 'home',
component: Home,
beforeEnter: (to, from, next) => {
console.log('this is beforeEnter');
next();
}
}
]
複製代碼
組件守衛設置:學習
咱們來看一段代碼:動畫
beforeRouteEnter(to, from, next){
console.log('this is before route enter');
next(vm => {
console.log(vm); //vm就是當前組件的實例
});
},
複製代碼
beforeRouteUpdate(to, from, next):這一守衛是當路由發生變化,組件被複用的時候調用的。因此咱們能夠知道,首次進入組建的時候是不會調用這一守衛的,只有當複用發生的時候纔會調用。同時這一函數之中能夠調用this,由於當前組件對象已經被渲染了。
beforeRouteLeave(to, from, next):這一守衛會在當前組件即將離開的時候進行調用,咱們經常在頁面離開的時候得到一些是否要離開當前界面的確認框,就能夠經過這一守衛進行實現。同時這一守衛之中也是能夠調用this的。
咱們綜合上面三個守衛來一段代碼:
beforeRouteEnter(to, from, next){
console.log('this is before route enter');
next(vm => {
console.log(vm);
});
},
beforeRouteUpdate(to, from, next){
console.log('this is before route update');
next();
},
beforeRouteLeave(to, from, next){
var confirm = confirm("是否離開當前頁面?");
if(confirm){
console.log('this is before route Leave');
next();
}
else {
next(false);
}
}
複製代碼
最後咱們來總結一下守衛的調用過程吧。
經過使用< transition >標籤來進行動效,基礎篇咱們有說過router-view這個功能標籤是可使用動效標籤包裹,而且可使用keep-alive標籤的,這裏咱們來嘗試一個簡單的動效吧。 上代碼:
html代碼:
<transition-group name="change">
<router-view key="default"/>
<router-view key="child2" name="child2"/>
</transition-group>
style代碼:
.change-enter{
opacity: 0
}
.change-enter-active{
transition: opacity 1s ease;
}
.change-enter-to{
opacity: 1;
}
.change-leave{
opacity: 1
}
.change-leave-active{
transition: opacity 1s ease;
}
.change-leave-to{
opacity: 0;
}
複製代碼
這樣咱們就簡單實現了一個隱出隱現的效果。
本文主要是說明了路由守衛的功能和使用,同時捎帶說起了過分動畫內容。路由的所有概念和用法能夠說就此所有說起完畢。以後關於vue-router的內容只剩下源碼閱讀,和一些開發時候的問題總結,我會努力持續更新,但願看官們能滿意。有什麼錯誤的地方也請幫忙告知,我也會即便修改過來的。歡迎你們一塊兒學習討論