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

詳解vue-router導(dǎo)航守衛(wèi)

 更新時間:2019年01月19日 11:13:55   作者:muzidigbig  
今天小編就為大家分享一篇關(guān)于詳解vue-router導(dǎo)航守衛(wèi),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

當(dāng)做Vue-cli項目的時候需要在路由跳轉(zhuǎn)前做一些驗證,比如登錄驗證,是網(wǎng)站中的普遍需求。

對此,vue-router 提供的 beforeEach可以方便地實現(xiàn)全局導(dǎo)航守衛(wèi)(navigation-guards)。組件內(nèi)部的導(dǎo)航守衛(wèi)函數(shù)使用相同,只是函數(shù)名稱不同(beforeRouteEnter 、beforeRouteUpdate(2.2 新增) 、beforeRouteLeave)。

鉤子(Hook),早期編程可能有個概念叫句柄,不知道將兩者類比而且強(qiáng)行歸為一類是不是合適。鉤子的用處是在某個特定流程中的不同時機(jī)暴露出一些函數(shù),使得用戶可以通過覆寫這些函數(shù)實現(xiàn)在原有位置執(zhí)行自己的代碼邏輯的功能。

1. 分類

vue-router中的導(dǎo)航鉤子按定義位置不同(執(zhí)行時機(jī)也不同)分為全局鉤子、路由級鉤子和組件級鉤子。

  • 全局鉤子

全局鉤子有三個,分別是beforeEach、beforeResolve和afterEach,在路由實例對象注冊使用;

  • 路由級鉤子

路由級鉤子有beforeEnter,在路由配置項中項定義;

  • 組件級鉤子

組件級鉤子有beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave,在組件屬性中定義;

官方文檔地址:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

如何設(shè)置一個全局守衛(wèi)

你可以使用 router.beforeEach 注冊一個全局前置守衛(wèi):就是在你router配置的下方注冊

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
 // ...
})

當(dāng)一個導(dǎo)航觸發(fā)時,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用。守衛(wèi)是異步解析執(zhí)行,此時導(dǎo)航在所有守衛(wèi) resolve 完之前一直處于 等待中。

每個守衛(wèi)方法接收三個參數(shù):

to: Route: 即將要進(jìn)入的目標(biāo) 路由對象

from: Route: 當(dāng)前導(dǎo)航正要離開的路由

next: Function: 一定要調(diào)用該方法來 resolve 這個鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。

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

確保要調(diào)用 next 方法,否則鉤子就不會被 resolved。

一、認(rèn)識beforeEach()中的參數(shù)

全局守衛(wèi)(就是對整個路由實例進(jìn)行守衛(wèi),對其中的子路由也會進(jìn)行守衛(wèi))

路由獨(dú)享的守衛(wèi)(對實例中某個路由進(jìn)行守衛(wèi))

小結(jié):

全局和局部

import Vue from 'vue';
import VueRouter from 'vue-router';
// Vue中插件必須use注冊
Vue.use(VueRouter);
// 路由配置項,此處是路由級鉤子的定義
const routes = [{
    path: '/',
    component: resolve => require(['./index.vue'], resolve),
    keepAlive: true,
  },
  {
    path: '/user/:userName',
    keepAlive: true,
    beforeEnter(to,from,next){
      console.log('router beforeEnter');
      next();
    },
    component: resolve => require(['./user.vue'], resolve),
  }];
// 實例化路由對象
const router = new VueRouter({
  routes
});
// 全局鉤子
router.beforeEach((to,from,next)=>{
  console.log('global beforeEach')
  next();
});
router.beforeResolve((to,from,next)=>{
  console.log('global beforeResolve')
  next();
});
router.afterEach((to,from,next)=>{
  console.log('global afterEach')
});
// 實例化Vue對象并掛載
new Vue({
  router
}).$mount('#app');

use.vue組件中使用導(dǎo)航守衛(wèi)

<template>
  <div>
    <h1>{{ msg }}</h1>
    <p>我是:{{userName}}</p>
  </div>
</template>
<script>
  export default {
    name: 'user',
    data () {
      return {
        msg: '這里是 User Page.',
        userName: '葉落'
      };
    },
    methods: {},
    mounted () {
      var me = this;
      me.userName = me.$route.params.userName;
      console.log('user mounted.');
    },
    beforeRouteEnter (to, from, next) {
      console.log('component beforeRouteEnter');
      next();
    },
    beforeRouteUpdate (to, from, next) {
      console.log('component beforeRouteUpdate');
      next();
    },
    beforeRouteLeave(to,from,next){
      console.log('component beforeRouteLeave');
      next();
    }
  };
</script>

執(zhí)行時機(jī)

由首頁進(jìn)入user頁面:

global beforeEach > router beforeEnter > component beforeRouteEnter > global beforeResolve > global afterEach > mounted

由user回到首頁:

component beforeRouteLeave => global beforeEach => global beforeResolve => global afterEach

排除beforeRouteUpdate,其余六個導(dǎo)航鉤子的執(zhí)行時機(jī)其實很好理解。大體按照leave、before、enter、resolve、after的順序并全局優(yōu)先的思路執(zhí)行。beforeRouteUpdate的觸發(fā)是在動態(tài)路由情形下,比如 path: '/user/:userName' 這條路由,當(dāng)頁面不變更只動態(tài)的改變參數(shù)userName時,beforeRouteUpdate便會觸發(fā)。

結(jié)論:使用vue組件拼湊成整個應(yīng)用,每個頁面是獨(dú)立的,路由依靠鏈接跳轉(zhuǎn),會刷新頁面。使用vue-router則可以不刷新頁面加載對應(yīng)組件,hash和history模式模擬路徑變化,不刷新頁面。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 如何用webpack4帶你實現(xiàn)一個vue的打包的項目

    如何用webpack4帶你實現(xiàn)一個vue的打包的項目

    這篇文章主要介紹了如何用webpack4帶你實現(xiàn)一個vue的打包的項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Vue中ElementUI結(jié)合transform使用時如何修復(fù)el-select彈框定位不準(zhǔn)確問題

    Vue中ElementUI結(jié)合transform使用時如何修復(fù)el-select彈框定位不準(zhǔn)確問題

    這篇文章主要介紹了Vue中ElementUI結(jié)合transform使用時如何修復(fù)el-select彈框定位不準(zhǔn)確問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • vue如何監(jiān)聽瀏覽器主動刷新

    vue如何監(jiān)聽瀏覽器主動刷新

    這篇文章主要介紹了vue如何監(jiān)聽瀏覽器主動刷新,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue使用map代替Aarry數(shù)組循環(huán)遍歷的方法

    vue使用map代替Aarry數(shù)組循環(huán)遍歷的方法

    這篇文章主要介紹了vue使用map代替Aarry數(shù)組循環(huán)遍歷的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • vue如何動態(tài)配置ip與端口

    vue如何動態(tài)配置ip與端口

    這篇文章主要介紹了vue如何動態(tài)配置ip與端口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue3+echarts繪制世界地圖的示例代碼

    Vue3+echarts繪制世界地圖的示例代碼

    最近做項目需要實現(xiàn)世界地圖,本文主要介紹了Vue3+echarts繪制世界地圖的示例代碼,具有一定的參考價值,感謝的可以了解一下
    2024-03-03
  • Vue動態(tài)加載ECharts圖表數(shù)據(jù)的方式

    Vue動態(tài)加載ECharts圖表數(shù)據(jù)的方式

    這篇文章主要介紹了Vue動態(tài)加載ECharts圖表數(shù)據(jù)的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Vue+mui實現(xiàn)圖片的本地緩存示例代碼

    Vue+mui實現(xiàn)圖片的本地緩存示例代碼

    這篇文章主要介紹了Vue+mui實現(xiàn)圖片的本地緩存的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • 如何去掉ElementUI Table的hover變色問題

    如何去掉ElementUI Table的hover變色問題

    這篇文章主要介紹了如何去掉ElementUI Table的hover變色問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue模版編譯詳情

    vue模版編譯詳情

    本文的初衷是想讓更多哎學(xué)習(xí)的人知道并了解vue模版編譯,所以文中主要以階段流程為主,不會涉及過多的底層代碼邏輯,需要的朋友可以參考一下
    2021-09-09

最新評論

平谷区| 通辽市| 桦南县| 类乌齐县| 蛟河市| 台州市| 西宁市| 清镇市| 四子王旗| 武宣县| 遂川县| 福泉市| 商丘市| 夹江县| 衡阳县| 克拉玛依市| 镇雄县| 康马县| 沙洋县| 襄樊市| 磐安县| 霸州市| 鲜城| 吉安市| 宝应县| 延津县| 吴桥县| 司法| 渝中区| 沂南县| 镇原县| 隆昌县| 团风县| 高阳县| 五原县| 闸北区| 西贡区| 龙胜| 鹤山市| 普定县| 大关县|