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

vue3中7種路由守衛(wèi)的使用大全舉例

 更新時間:2023年03月30日 09:56:23   作者:囂張農(nóng)民  
最近在學(xué)習(xí)vue,感覺路由守衛(wèi)這個地方知識點挺多的,而且很重要,下面這篇文章主要給大家介紹了關(guān)于vue3中7種路由守衛(wèi)的使用大全,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

路由守衛(wèi)有哪幾種?

路由守衛(wèi)(導(dǎo)航守衛(wèi))分為三種:全局守衛(wèi)(3個)、路由獨享守衛(wèi)(1個)、組件的守衛(wèi)(3個)

路由守衛(wèi)的三個參數(shù)

to:要跳轉(zhuǎn)到的目標(biāo)路由

from:從當(dāng)前哪個路由進(jìn)行跳轉(zhuǎn)

next:不做任何阻攔,直接通行

注意: 必須要確保 next函數(shù) 在任何給定的導(dǎo)航守衛(wèi)中都被調(diào)用過一次。它可以出現(xiàn)多次,但是只能在所有的邏輯路徑都不重疊的情況下,否則會報錯。

案例:

router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  else next()
})

一、全局路由守衛(wèi)

全局路由守衛(wèi)有三個:全局前置守衛(wèi),全局后置守衛(wèi),全局解析守衛(wèi)

全局前置守衛(wèi)

1.使用方式:main.js中配置,在路由跳轉(zhuǎn)前觸發(fā),這個鉤子作用主要是用于登錄驗證,也就是路由還沒跳轉(zhuǎn)提前告知,以免跳轉(zhuǎn)了再通知就為時已晚

2.代碼:

router.beforeEach((to,from,next)=>{})

3.例子:做登錄判斷

router.beforeEach((to,from,next)=>{
  if(to.path == '/login' || to.path == '/register'){
    next();
  }else{
    alert('您還沒有登錄,請先登錄');
    next('/login');
  }
})

全局后置守衛(wèi)

1.使用方式:main.js中配置,和beforeEach相反,它是在路由跳轉(zhuǎn)完成后觸發(fā),它發(fā)生在beforeEach和beforeResolve之后,beforeRouteEnter(組件內(nèi)守衛(wèi))之前。鉤子不會接受next函數(shù)也不會改變導(dǎo)航本身

2.代碼:

router.afterEach((to,from)=>{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->})

全局解析守衛(wèi)

1.使用方式:main.js中配置,這個鉤子和beforeEach類似,也是路由跳轉(zhuǎn)前觸發(fā),區(qū)別是在導(dǎo)航被確認(rèn)之前,同時在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后,即在 beforeEach 和 組件內(nèi)beforeRouteEnter 之后,afterEach之前調(diào)用。

2.代碼:

router.beforeResolve((to,from,next)=>{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->})

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

組件內(nèi)守衛(wèi)有個三個:路由進(jìn)入之前beforeRouteEnter,路由離開時beforeRouteLeave,頁面更新時beforeRouteUpdate

  • beforeRouteEnter(to, from, next)

1.使用方式:在組件模板中使用,跟methods: {}等同級別書寫,組件路由守衛(wèi)是寫在每個單獨的vue文件里面的路由守衛(wèi)

2.代碼:

beforeRouteEnter(to, from, next) {
    // 在組件生命周期beforeCreate階段觸發(fā)
    console.log('組件內(nèi)路由前置守衛(wèi) beforeRouteEnter', this) // 訪問不到this
    next((vm) => {
      console.log('組件內(nèi)路由前置守衛(wèi) vm', vm) // vm 就是this
    })
  },

beforeRouteUpdate(to, from, next)

1.使用方式:在組件模板中使用,跟methods: {}等同級別書寫,組件路由守衛(wèi)是寫在每個單獨的vue文件里面的路由守衛(wèi)

2.代碼:

beforeRouteUpdate (to, from, next) {
    // 同一頁面,刷新不同數(shù)據(jù)時調(diào)用,
    // 可以訪問組件實例 
}
  • beforeRouteLeave(to, from, next)

1.使用方式:在組件模板中使用,跟methods: {}等同級別書寫,組件路由守衛(wèi)是寫在每個單獨的vue文件里面的路由守衛(wèi)

2.代碼:

beforeRouteLeave (to, from, next) {
    // 導(dǎo)航離開該組件的對應(yīng)路由時調(diào)用
    // 可以訪問組件實例
}

路由獨享守衛(wèi)

路由獨享守衛(wèi)只有一個:進(jìn)入路由時觸發(fā)beforeEnter

  • 路由獨享守衛(wèi) beforeEnter(to, from, next)

1.使用方式:在router.js中使用,路由獨享守衛(wèi)是在路由配置頁面單獨給路由配置的一個守衛(wèi)

2.代碼

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

導(dǎo)航解析流程

1.觸發(fā)進(jìn)入其它路由
2.調(diào)用要離開路由的組件守衛(wèi)beforeRouteLeave
3.調(diào)用全局的前置守衛(wèi)beforeEach
4.在重用的組件里調(diào)用 beforeRouteUpdate
5.在路由配置里的單條路由調(diào)用 beforeEnter
6.解析異步路由組件
7.在將要進(jìn)入的路由組件中調(diào)用beforeRouteEnter
8.調(diào)用全局的解析守衛(wèi)beforeResolve
9.導(dǎo)航被確認(rèn)
10.調(diào)用全局的后置鉤子afterEach
11.觸發(fā) DOM 更新mounted
12.執(zhí)行beforeRouteEnter守衛(wèi)中傳給 next的回調(diào)函數(shù)

補(bǔ)充:下面在看看三個組件內(nèi)部守衛(wèi)

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave
export default {
  setup() {},
  mounted(){
  },
  methods: {
    goBack() {
      this.$router.go(-1)
    },
  },
//  組件內(nèi)守衛(wèi)
beforeRouteEnter(to ,from , next){
    // next() 可以通過內(nèi)部的回調(diào)函數(shù)訪問實例
     // 在渲染該組件的對應(yīng)路由被驗證前調(diào)用
    // 不能獲取組件實例 `this` !
    // 因為當(dāng)守衛(wèi)執(zhí)行時,組件實例還沒被創(chuàng)建!
    window.console.log(this) // undefined
    window.console.log(to)
    window.console.log(from)
    next((e)=> {
        window.console.log(e) // 當(dāng)前的this
    })
},
beforeRouteUpdata(to ,from){
    // 無 next 
     // 在當(dāng)前路由改變,但是該組件被復(fù)用時調(diào)用
    // 舉例來說,對于一個帶有動態(tài)參數(shù)的路徑 `/users/:id`,在 `/users/1` 和 `/users/2` 之間跳轉(zhuǎn)的時候,
    // 由于會渲染同樣的 `UserDetails` 組件,因此組件實例會被復(fù)用。而這個鉤子就會在這個情況下被調(diào)用。
    // 因為在這種情況發(fā)生的時候,組件已經(jīng)掛載好了,導(dǎo)航守衛(wèi)可以訪問組件實例 `this`
    window.console.log(this)
    window.console.log(to)
    window.console.log(from)
},
beforeRouteLeave(to ,from){
    // 無 next
    // 在導(dǎo)航離開渲染該組件的對應(yīng)路由時調(diào)用
    // 與 `beforeRouteUpdate` 一樣,它可以訪問組件實例 `this`
    window.console.log(this)
    window.console.log(to)
    window.console.log(from)
},
}

解析 : 這三個差不多就放在一起還有個對照

1.首先來說說執(zhí)行時機(jī) : 路由獨享守衛(wèi)的后面 調(diào)用這三個守衛(wèi) 。

2. 書寫位置 : 在單個vue文件內(nèi)部 , 與 methods , 等 api 同級

3. 只有 beforeRouteEnter 參數(shù) 有 next , 因為這個路由不能訪問this ,于是就有了next 函數(shù) , 可以向里面?zhèn)鬟f一個回調(diào)函數(shù) , 回調(diào)函數(shù)的參數(shù)就是 this , 可以看代碼, 其他兩個組件內(nèi)部守衛(wèi) 都可以的訪問this , 所以就沒有必要在去加next ,(官網(wǎng)意思就是這個)

結(jié)尾:

vue2和vue3的寫法基本一致沒有改變

到此這篇關(guān)于vue3中7種路由守衛(wèi)的使用大全的文章就介紹到這了,更多相關(guān)vue3路由守衛(wèi)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實現(xiàn)計算器功能

    vue實現(xiàn)計算器功能

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • vue通過url方式展示PDF的幾種方法

    vue通過url方式展示PDF的幾種方法

    小編最近接手的項目中有個需求,前端顯示后端返回的PDF格式的文件,下面這篇文章主要給大家介紹了關(guān)于vue通過url方式展示PDF的幾種方法,需要的朋友可以參考下
    2023-01-01
  • vue3實現(xiàn)問卷調(diào)查的示例代碼

    vue3實現(xiàn)問卷調(diào)查的示例代碼

    本文主要介紹了vue3實現(xiàn)問卷調(diào)查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • vue仿網(wǎng)易云音樂播放器界面的簡單實現(xiàn)過程

    vue仿網(wǎng)易云音樂播放器界面的簡單實現(xiàn)過程

    興趣乃學(xué)習(xí)的動力,想自己動手寫個音樂播放器,查了網(wǎng)上一些博客寫了一個,這篇文章主要給大家介紹了關(guān)于vue仿網(wǎng)易云音樂播放器界面的簡單實現(xiàn)過程,需要的朋友可以參考下
    2021-11-11
  • vue如何加載本地json數(shù)據(jù)

    vue如何加載本地json數(shù)據(jù)

    這篇文章主要介紹了vue如何加載本地json數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 淺談VUE項目打包后運(yùn)行頁面一片白問題

    淺談VUE項目打包后運(yùn)行頁面一片白問題

    本文主要介紹了淺談VUE項目打包后運(yùn)行頁面一片白問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-01-01
  • Vue?+?ElementUI表格內(nèi)實現(xiàn)圖片點擊放大效果的兩種實現(xiàn)方式

    Vue?+?ElementUI表格內(nèi)實現(xiàn)圖片點擊放大效果的兩種實現(xiàn)方式

    這篇文章主要介紹了Vue?+?ElementUI表格內(nèi)實現(xiàn)圖片點擊放大效果的兩種實現(xiàn)方式,第一種使用el-popover彈出框來實現(xiàn)而第二種使用v-viewer插件實現(xiàn),需要的朋友可以參考下
    2024-08-08
  • Vue.js中v-bind指令的用法介紹

    Vue.js中v-bind指令的用法介紹

    這篇文章介紹了Vue.js中v-bind指令的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • vue+quasar使用遞歸實現(xiàn)動態(tài)多級菜單

    vue+quasar使用遞歸實現(xiàn)動態(tài)多級菜單

    這篇文章主要為大家詳細(xì)介紹了vue+quasar使用遞歸實現(xiàn)動態(tài)多級菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue中el-table條件渲染防止樣式亂掉(解決方法)

    Vue中el-table條件渲染防止樣式亂掉(解決方法)

    這篇文章主要介紹了Vue中el-table條件渲染防止樣式亂掉問題,通過使用:key="Math.random()" 可解決樣式錯亂問題,此key屬性是vue自帶的特殊屬性,主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時辨識 VNodes,依次來提升頁面渲染性能,感興趣的朋友一起看看吧
    2023-11-11

最新評論

酒泉市| 拉萨市| 北流市| 泸西县| 博白县| 永安市| 宁海县| 平定县| 攀枝花市| 慈利县| 岳西县| 松江区| 靖西县| 崇礼县| 福清市| 韶山市| 垫江县| 子洲县| 四子王旗| 昭觉县| 镇雄县| 通河县| 衡阳县| 新丰县| 阳新县| 望谟县| 兴仁县| 米易县| 邯郸市| 阿合奇县| 天长市| 福建省| 宣城市| 平定县| 博客| 荃湾区| 无极县| 石嘴山市| 清徐县| 正宁县| 浦北县|