最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

快速理解Vue路由導(dǎo)航守衛(wèi)

 更新時(shí)間:2021年12月29日 12:00:01   作者:前端老實(shí)人  
這篇文章主要介紹了快速理解Vue路由導(dǎo)航守衛(wèi),“導(dǎo)航”表示路由正在發(fā)生變化,vue-router?提供的導(dǎo)航守衛(wèi)主要用來(lái)通過(guò)跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。有多種機(jī)會(huì)植入路由導(dǎo)航過(guò)程?中:全局的,?單個(gè)路由獨(dú)享的,?或者組件級(jí)的,下面來(lái)快速來(lái)接具體內(nèi)容吧

概念:

“導(dǎo)航”表示路由正在發(fā)生變化

vue-router 提供的導(dǎo)航守衛(wèi)主要用來(lái)通過(guò)跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。有多種機(jī)會(huì)植入路由導(dǎo)航過(guò)程 中:全局的, 單個(gè)路由獨(dú)享的, 或者組件級(jí)的。

導(dǎo)航守衛(wèi):包括全局導(dǎo)航守衛(wèi)和局部導(dǎo)航守衛(wèi)

一、全局守衛(wèi)

vue-router全局有三個(gè)守衛(wèi)

  • router.beforeEach :全局前置守衛(wèi),進(jìn)入路由之前
  • router.beforeResolve :全局解析守衛(wèi),在beforeRouteEnter調(diào)用之后調(diào)用(不常用)
  • router.afterEach :全局后置鉤子,進(jìn)入路由之后

1.全局前置守衛(wèi)

你可以使用 router.beforeEach 注冊(cè)一個(gè)全局前置守衛(wèi):

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// to和from都是路由實(shí)例
// to:即將跳轉(zhuǎn)到的路由
// from:現(xiàn)在的要離開(kāi)的路由
// next:函數(shù)
})

  • next: Function : 一定要調(diào)用該方法來(lái) resolve 這個(gè)鉤子。執(zhí)行效果依賴(lài) next 方法的調(diào)用參數(shù)。
  • next() : 進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。
  • next(false) : 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了 (可能是用戶(hù)手動(dòng)或者瀏覽器后退按鈕),那么 URL 地址會(huì)重置到 from 路由對(duì)應(yīng)的地址。
  • next(‘/') 或者 next({ path: ‘/' }) : 跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航。你可以向 next 傳遞任意位置對(duì)象,且允許設(shè)置諸如 replace: true 、 name: ‘home' 之類(lèi)的選項(xiàng)以及任何用在 router-link to proprouter.push 中的選項(xiàng)。
  • next(error) : (2.4.0+) 如果傳入 next 的參數(shù)是一個(gè) Error 實(shí)例,則導(dǎo)航會(huì)被終止且該錯(cuò)誤會(huì) 被傳遞給 router.onError() 注冊(cè)過(guò)的回調(diào)。

注意:如果是next(‘/') 或者 next({ path: ‘/' }),只要帶了要放行的路徑,那么前面必須有判斷,在

什么時(shí)候給他放行,不然他會(huì)一直循環(huán)。

2.全局解析守衛(wèi)

2.5.0 新增

// 全局解析守衛(wèi) 
router.beforeResolve((to,from.next) => { })

在 2.5.0+ 你可以用 router.beforeResolve 注冊(cè)一個(gè)全局守衛(wèi)。這和 router.beforeEach 類(lèi)似,區(qū)

別是在導(dǎo)航被確認(rèn)之前,同時(shí)在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后,解析守衛(wèi)就被調(diào)用。

3.全局后置鉤子

你也可以注冊(cè)全局后置鉤子,然而和守衛(wèi)不同的是,這些鉤子不會(huì)接受 next 函數(shù)也不會(huì)改變導(dǎo)航本身:

// 全局后置鉤子
 router.afterEach((to,form) => { })

因?yàn)椋?/strong>afterEach被調(diào)用時(shí),路由已經(jīng)跳轉(zhuǎn)完成,所以不需要next函數(shù)

三、路由獨(dú)享的守衛(wèi)

如果不想在全局配置路由的話(huà),可以為某些路由單獨(dú)配置守衛(wèi)

比如:mainpage頁(yè)面單獨(dú)配置守衛(wèi)

{ 
path: '/mainpage', 
name: 'About', 
component: About, // 路由獨(dú)享守衛(wèi) 
beforeEnter:(to,from,next) => {
 if(from.name === '/mainpage/about'){ alert("這是從about來(lái)的") 
   }else{
 alert("這不是從about來(lái)的") 
   }next(); // 必須調(diào)用來(lái)進(jìn)行下一步操作。否則是不會(huì)跳轉(zhuǎn)的 
 }
} 
},

四、組件內(nèi)的守衛(wèi)

最后,你可以在路由組件內(nèi)直接定義以下路由導(dǎo)航守衛(wèi):

  • beforeRouteEnter():進(jìn)入路由前
  • beforeRouteUpdate():路由復(fù)用同一個(gè)組件時(shí)
  • beforeRouteLeave():離開(kāi)當(dāng)前路由時(shí)

在Product中舉個(gè)例子:

// 全局解析守衛(wèi)
router.beforeResolve((to,from.next) => {
})
// 全局后置鉤子
router.afterEach((to,form) => {
})
{
path: '/mainpage',
name: 'About',
component: About,
// 路由獨(dú)享守衛(wèi)
beforeEnter:(to,from,next) => {
if(from.name === '/mainpage/about'){
alert("這是從about來(lái)的")
}else{
alert("這不是從about來(lái)的")
}
next(); // 必須調(diào)用來(lái)進(jìn)行下一步操作。否則是不會(huì)跳轉(zhuǎn)的
}
}
},
export default {
// 組件內(nèi)守衛(wèi)beforeRouteUpdate被觸發(fā)的條件是:當(dāng)前路由改變,但是該組件被復(fù)用的時(shí)候。
比如說(shuō):product/orders到product/cart這個(gè)路由,都復(fù)用了 Product.vue 這個(gè)組件,這個(gè)時(shí)候
beforeRouteUpdate就會(huì)被觸發(fā)??梢垣@取到this實(shí)例。
一個(gè)完整的導(dǎo)航解析流程
// 因?yàn)檫@個(gè)鉤子調(diào)用的時(shí)候,組件實(shí)例還沒(méi)有被創(chuàng)建出來(lái),因此獲取不到this
beforeRouteEnter (to, from, next) {
console.log(to.name);
// 如果想獲取到實(shí)例的話(huà)
// next(vm=>{
// // 這里的vm是組件的實(shí)例(this)
// });
next();
},
beforeRouteUpdate(to,from,next){
console.log(to.name, from.name);
next();
},
// 路由即將要離開(kāi)的時(shí)候調(diào)用此方法
// 比如說(shuō),用戶(hù)編輯了一個(gè)東西,但是還么有保存,這時(shí)候他要離開(kāi)這個(gè)頁(yè)面,就要提醒他一下,還沒(méi)保
存,是否要離開(kāi)
beforeRouteLeave (to, from, next) {
const leave = confirm("確定要離開(kāi)嗎?");
if(leave) next() // 離開(kāi)
else next(false) // 不離開(kāi)
},
}

  • beforeRouteUpdate被觸發(fā)的條件是:當(dāng)前路由改變,但是該組件被復(fù)用的時(shí)候。
  • 比如說(shuō):product/orders到product/cart這個(gè)路由,都復(fù)用了 Product.vue 這個(gè)組件,這個(gè)時(shí)候
  • beforeRouteUpdate就會(huì)被觸發(fā)??梢垣@取到this實(shí)例。

五、一個(gè)完整的導(dǎo)航解析流程

  • 1、導(dǎo)航被觸發(fā)。
  • 2、在失活的組件(即將離開(kāi)的頁(yè)面組件)里調(diào)用離開(kāi)守衛(wèi)。 beforeRouteLeave
  • 3、調(diào)用全局的 beforeEach 守衛(wèi)。
  • 4、在重用的組件里調(diào)用 beforeRouteUpdate 守衛(wèi) (2.2+)。
  • 5、在路由配置里調(diào)用(路由獨(dú)享的守衛(wèi)) beforeEnter
  • 6、解析異步路由組件
  • 7、在被激活的組件(即將進(jìn)入的頁(yè)面組件)里調(diào)用 beforeRouteEnter。
  • 8、調(diào)用全局的 beforeResolve 守衛(wèi) (2.5+)。
  • 9、導(dǎo)航被確認(rèn)。
  • 10、調(diào)用全局的 afterEach 鉤子。所有的鉤子都觸發(fā)完了。
  • 11、觸發(fā) DOM 更新。
  • 12、用創(chuàng)建好的實(shí)例調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù)。

到此這篇關(guān)于快速理解Vue路由導(dǎo)航守衛(wèi)的文章就介紹到這了,更多相關(guān)Vue路由導(dǎo)航守衛(wèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于vue和bootstrap實(shí)現(xiàn)簡(jiǎn)單留言板功能

    基于vue和bootstrap實(shí)現(xiàn)簡(jiǎn)單留言板功能

    這篇文章主要為大家詳細(xì)介紹了基于vue和bootstrap實(shí)現(xiàn)簡(jiǎn)單留言板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • VUE實(shí)現(xiàn)吸底按鈕

    VUE實(shí)現(xiàn)吸底按鈕

    這篇文章主要為大家詳細(xì)介紹了VUE實(shí)現(xiàn)吸底按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 詳解vuex狀態(tài)管理模式

    詳解vuex狀態(tài)管理模式

    這篇文章主要介紹了詳解vuex狀態(tài)管理模式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Vue使用html2canvas實(shí)現(xiàn)截取圖片并保存

    Vue使用html2canvas實(shí)現(xiàn)截取圖片并保存

    html2canvas是一個(gè)JavaScript庫(kù),它可以將HTML元素轉(zhuǎn)換為Canvas元素本文將介紹一下Vue如何使用html2canvas實(shí)現(xiàn)截取圖片并保存功能,需要的可以參考下
    2023-12-12
  • 詳解vue-cli + webpack 多頁(yè)面實(shí)例配置優(yōu)化方法

    詳解vue-cli + webpack 多頁(yè)面實(shí)例配置優(yōu)化方法

    本篇文章主要介紹了詳解vue-cli + webpack 多頁(yè)面實(shí)例配置優(yōu)化方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • element日歷calendar組件上月、今天、下月、日歷塊點(diǎn)擊事件及模板源碼

    element日歷calendar組件上月、今天、下月、日歷塊點(diǎn)擊事件及模板源碼

    這篇文章主要介紹了element日歷calendar組件上月、今天、下月、日歷塊點(diǎn)擊事件及模板源碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue項(xiàng)目報(bào)錯(cuò):Uncaught SyntaxError: Unexpected token <

    Vue項(xiàng)目報(bào)錯(cuò):Uncaught SyntaxError: Unexpected token <

    這篇文章主要介紹了Vue項(xiàng)目報(bào)錯(cuò):Uncaught SyntaxError: Unexpected token <,在引入第三方依賴(lài)的 JS 文件時(shí),遇到的一個(gè)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • vue mixins合并策略以及應(yīng)用場(chǎng)景分析

    vue mixins合并策略以及應(yīng)用場(chǎng)景分析

    這篇文章主要介紹了vue mixins合并策略以及應(yīng)用場(chǎng)景,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue組件值變化但不刷新強(qiáng)制組件刷新的問(wèn)題

    vue組件值變化但不刷新強(qiáng)制組件刷新的問(wèn)題

    這篇文章主要介紹了vue組件值變化但不刷新強(qiáng)制組件刷新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 淺析Vue中拆分視圖層代碼的5點(diǎn)建議

    淺析Vue中拆分視圖層代碼的5點(diǎn)建議

    這篇文章主要介紹了Vue中拆分視圖層代碼的5點(diǎn)建議,下面就如何進(jìn)行腳本代碼拆分提供一些思路,有一些可能是很基本的原則,為盡可能完整就放在一起,你并不需要從最開(kāi)始就采納所有的建議。需要的朋友可以參考下
    2019-08-08

最新評(píng)論

河曲县| 汝城县| 永春县| 涟水县| 邵阳市| 寿光市| 肇庆市| 论坛| 麟游县| 尤溪县| 陇南市| 北流市| 永昌县| 北宁市| 云和县| 四子王旗| 富顺县| 宝鸡市| 云南省| 巴彦淖尔市| 江安县| 亳州市| 开远市| 武强县| 淮安市| 伊川县| 锦州市| 丰都县| 承德市| 常德市| 抚州市| 泾川县| 衡阳市| 寿阳县| 永平县| 漠河县| 芦溪县| 青神县| 迁安市| 湘阴县| 灵石县|