一、 路由的元信息vue
在定義路由的時候,能夠定義 meta 字段es6
children: [ { path: 'bar', component: Bar, // a meta field 元信息 meta: { requiresAuth: true } 這裏路由提示須要認證 } ]
如何使用這個meta呢?vue-router
路由中匹配到的路徑都被稱爲路由記錄,每一個路由記錄都會被存在 $route.metched 中數組
因此,能夠經過訪問$route.metched 遍歷數組,得到meta值。promise
在 路由守衛的參數中也有對應的meta值瀏覽器
router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) { // 檢查登陸狀態 // 未登陸,就跳到登陸頁 if (!auth.loggedIn()) { next({ path: '/login', query: { redirect: to.fullPath } }) } else { next() } } else { next() // 確保必定要調用 next() } })
二、 基於路由的動畫效果app
三、 獲取數據異步
通常是兩種:函數
1,在路由跳轉後組件渲染時獲取數據,能夠loading,每一個視圖能夠用本身的loading動畫
2,能夠在 beforeRouteEnter beforeRouteUpdate 中獲取數據,和路由同步或者獲取不到數據後不next().
四、 滾動行爲
切換路由路徑,對應不一樣頁面,同時vue-router還能夠保留滾動的位置信息,但僅限於支持pushState的瀏覽器。
scrollBehavior (to, from, savedPosition) { // 1,返回跳轉到的指定的頁面的位置 if (to.hash) { return{ selector:to.hash }; } // 2, 返回保留的位置 if (savedPosition) { return savedPosition; } // 3, 返回置頂,也是 default return{ x:0, y:0 }; }
五、 異步滾動 (2.8.0新增)
返回一個promise 得出一個預期的位置
scrollBehavior (to, from, savedPosition) { return new Promise(resolve, reject) { setTimeout( () => { resolve({x: 0, y: 0}); }, 2000); // 接收 promise 傳值 } }
六、 組件懶加載方法 4 種
6.1 、es6 方式 2種
聲明高階函數
const apply = name => import(`../components/${name}.vue`);
函數引入組件
()=> import(`../components/HelloWorld.vue`);
6.2 、commonJS 方式 2種
直接引用
resolve => require.ensure([], () => resolve(require('../components/HelloWorld.vue')))
函數引入
component(resolve) { require(['../components/' + name + '.vue'], resolve) }