vue router 組件的高級應(yīng)用實(shí)例代碼
1 動態(tài)設(shè)置頁面標(biāo)題
頁面標(biāo)題是由 <title></title> 來控制的,因?yàn)?SPA 只有一個 HTML,所以當(dāng)切換到不同的頁面時,標(biāo)題是不會發(fā)生變化的。必須通過 JavaScript 來修改 <title></title> 中的內(nèi)容:
window.document.title ='xxx'
有一種思路是在每個頁面的 *.vue 的 mounted 鉤子函數(shù)中,通過 JavaScript 來修改 <title></title> 中的內(nèi)容。這種方式固然可行,但如果頁面很多,就會顯著增加維護(hù)成本,而且修改邏輯都是一樣的。有沒有更好的方法呢?
我們可以利用 vue-router 組件的導(dǎo)航鉤子 beforeEach 函數(shù),在路由發(fā)生變化時,統(tǒng)一設(shè)置。
import VueRouter from 'vue-router';
...
//加載 vue-router 插件
Vue.use(VueRouter);
/*定義路由匹配表*/
const Routers = [{
path: '/index',
component: (resolve) => require(['./router/views/index.vue'], resolve),
meta: {
title: '首頁'
}
},
//一次性加載
// {
// path: '/index',
// component: require('./router/views/index.vue')
// },
{
path: '/about',
component: (resolve) => require(['./router/views/about.vue'], resolve),
meta: {
title: '關(guān)于'
}
},
{
path: '/article/:id',
component: (resolve) => require(['./router/views/article.vue'], resolve)
}
,
{//當(dāng)訪問的頁面不存在時,重定向到首頁
path: '*',
redirect: '/index'
}
]
//路由配置
const RouterConfig = {
//使用 HTML5 的 History 路由模式
mode: 'history',
routes: Routers
};
//路由實(shí)例
const router = new VueRouter(RouterConfig);
//動態(tài)設(shè)置頁面標(biāo)題
router.beforeEach((to, from, next) => {
window.document.title = to.meta.title;
next();
})
new Vue({
el: '#app',
router: router,
render: h => h(Hello)
})
我們在路由匹配表中,為那些需要標(biāo)題的頁面,配置了 meta title 屬性:
meta: {
title: 'xxx'
}
然后在 beforeEach 導(dǎo)航鉤子函數(shù)中,從路由對象中獲取 meta title 屬性,用于標(biāo)題設(shè)置。beforeEach 有三個入?yún)ⅲ?/p>
參數(shù) 說明
| 參數(shù) | 說明 |
|---|---|
| to | 當(dāng)前導(dǎo)航,即將要進(jìn)入的路由對象。 |
| from | 當(dāng)前導(dǎo)航,即將要離開的路由對象。 |
| next | 調(diào)用 next() 之后,才會進(jìn)入下一步。 |
效果:

2 長頁面跳轉(zhuǎn)自動返回頂端
假設(shè)第一個頁面較長,用戶滾動查看到底部,這時如果又跳轉(zhuǎn)到另一個頁面,那么滾動條是會默認(rèn)停在上一個頁面的所在位置的。這種場景比較好的設(shè)計(jì)是:跳轉(zhuǎn)后會自動返回頂端。這可以通過 afterEach 鉤子函數(shù)來實(shí)現(xiàn),代碼如下:
router.afterEach((to, from, next) => {
window.scrollTo(0, 0);
});
組合使用 beforeEach 與 afterEach,還可以實(shí)現(xiàn):從一個頁面跳轉(zhuǎn)到另一個頁面時,出現(xiàn) Loading 動畫,當(dāng)新頁面加載后,再結(jié)束動畫。
3 登陸驗(yàn)證
某些頁面設(shè)置了權(quán)限,只有賬號登陸過,才能訪問;否則跳轉(zhuǎn)到登錄頁。假設(shè)我們使用 localStorage 來判斷是否登陸。
HTML5 的 localStorage 特性,用于本地存儲。它的出現(xiàn),解決了 cookie 存儲空間不足的問題 cookie 中每條 cookie 的存儲空間只有 4k) ,而 localStorage 中一般是 5M,這在不同的瀏覽器中 大小略有不同 。
router.beforeEach((to, from, next) => {
if (window.localStorage.getItem('token')) {
next();
} else {
next('/login');
}
});
next() 入?yún)?,如果?false,會不導(dǎo)航;如果為路徑,則會導(dǎo)航到指定路徑下的頁面。
總結(jié)
以上所述是小編給大家介紹的vue router 組件的高級應(yīng)用實(shí)例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
vue 中directive功能的簡單實(shí)現(xiàn)
本篇介紹directive的簡單實(shí)現(xiàn),主要學(xué)習(xí)其實(shí)現(xiàn)的思路及代碼的設(shè)計(jì),需要的朋友參考下吧2018-01-01
vue實(shí)現(xiàn)滾動鼠標(biāo)滾輪切換頁面
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)滾動鼠標(biāo)滾輪切換頁面,類似于縱向走馬燈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
vue ssr+koa2構(gòu)建服務(wù)端渲染的示例代碼
這篇文章主要介紹了vue ssr+koa2構(gòu)建服務(wù)端渲染的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
解決element ui select下拉框不回顯數(shù)據(jù)問題的解決
這篇文章主要介紹了解決element ui select下拉框不回顯數(shù)據(jù)問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
vue項(xiàng)目中jsonp跨域獲取qq音樂首頁推薦問題
這篇文章主要介紹了vue項(xiàng)目中jsonp跨域獲取qq音樂首頁推薦問題,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05

