<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
beforeEach的勾點函數,它是一個全域性的before 勾點函數, (before each)意思是在 每次每一個路由改變的時候都得執行一遍。
它的三個引數:
to
: (Route路由物件) 即將要進入的目標 路由物件 to物件下面的屬性: path params query hash fullPath matched name meta(在matched下,但是本例可以直接用)from
: (Route路由物件) 當前導航正要離開的路由next
: (Function函數) 一定要呼叫該方法來 resolve 這個勾點。 呼叫方法:next(引數或者空) ***必須呼叫router.beforeEach((to, from, next) => { if (to.meta.requireAuth) { //判斷該路由是否需要登入許可權 if (cookies('token')) { //通過封裝好的cookies讀取token,如果存在,name接下一步如果不存在,那跳轉回登入頁 next()//不要在next裡面加"path:/",會陷入死迴圈 } else { next({ path: '/login', query: {redirect: to.fullPath}//將跳轉的路由path作為引數,登入成功後跳轉到該路由 }) } } else { next() } })
應用場景,進入頁面登入判斷、管理員許可權判斷、瀏覽器判斷
//使用勾點函數對路由進行許可權跳轉 router.beforeEach((to, from, next) => { const role = localStorage.getItem('ms_username'); if(!role && to.path !== '/login'){ next('/login'); }else if(to.meta.permission){ // 如果是管理員許可權則可進入,這裡只是簡單的模擬管理員許可權而已 role === 'admin' ? next() : next('/403'); }else{ // 簡單的判斷IE10及以下不進入富文字編輯器,該元件不相容 if(navigator.userAgent.indexOf('MSIE') > -1 && to.path === '/editor'){ Vue.prototype.$alert('vue-quill-editor元件不相容IE10及以下瀏覽器,請使用更高版本的瀏覽器檢視', '瀏覽器不相容通知', { confirmButtonText: '確定' }); }else{ next(); } } })
router.beforeEach 是頁面載入之前,相反router.afterEach是頁面載入之後
你可以在路由設定上直接定義 beforeEnter 守衛:
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // ... } } ]
這些守衛與全域性前置守衛的方法引數是一樣的。
const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染該元件的對應路由被 confirm 前呼叫 // 不!能!獲取元件範例 `this` // 因為當勾點執行前,元件範例還沒被建立 }, beforeRouteUpdate (to, from, next) { // 在當前路由改變,但是該元件被複用時呼叫 // 舉例來說,對於一個帶有動態引數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候, // 由於會渲染同樣的 Foo 元件,因此元件範例會被複用。而這個勾點就會在這個情況下被呼叫。 // 可以存取元件範例 `this` }, beforeRouteLeave (to, from, next) { // 導航離開該元件的對應路由時呼叫 // 可以存取元件範例 `this` }
(一) 清除當前元件中的定時器
當一個元件中有一個定時器時, 在路由進行切換的時候, 可使用beforeRouteLeave將定時器進行清楚, 以免佔用記憶體:
beforeRouteLeave (to, from, next) { window.clearInterval(this.timer) //清楚定時器 next() }
(二) 當頁面中有未關閉的視窗, 或未儲存的內容時, 阻止頁面跳轉
如果頁面內有重要的資訊需要使用者儲存後才能進行跳轉, 或者有彈出框的情況. 應該阻止使用者跳轉,結合vuex狀態管理(dialogVisibility是否有儲存)
beforeRouteLeave (to, from, next) { //判斷是否彈出框的狀態和儲存資訊與否 if (this.dialogVisibility === true) { this.dialogVisibility = false //關閉彈出框 next(false) //回到當前頁面, 阻止頁面跳轉 }else if(this.saveMessage === false) { alert('請儲存資訊後退出!') //彈出警告 next(false) //回到當前頁面, 阻止頁面跳轉 }else { next() //否則允許跳轉 }
(三) 儲存相關內容到Vuex中或Session中
當用戶需要關閉頁面時, 可以將公用的資訊儲存到session或Vuex中
beforeRouteLeave (to, from, next) { localStorage.setItem(name, content); //儲存到localStorage中 next() }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45