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

Vue的路由動態(tài)重定向和導(dǎo)航守衛(wèi)實例

 更新時間:2018年03月17日 15:18:11   作者:R-H-R  
下面小編就為大家分享一篇Vue的路由動態(tài)重定向和導(dǎo)航守衛(wèi)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

根據(jù)vue官方文檔,對于重定向有詳細(xì)的示例,但是關(guān)于使用方法動態(tài)重定向的描述卻不多,重定向部分的描述如下:

重定向

重定向也是通過 routes 配置來完成,下面例子是從 /a 重定向到 /b:

const router = new VueRouter({
 routes: [
 { path: '/a', redirect: '/b' }
 ]
})

重定向的目標(biāo)也可以是一個命名的路由:

const router = new VueRouter({
 routes: [
 { path: '/a', redirect: { name: 'foo' }}
 ]
})

甚至是一個方法,動態(tài)返回重定向目標(biāo):

const router = new VueRouter({
 routes: [
 { path: '/a', redirect: to => {
  // 方法接收 目標(biāo)路由 作為參數(shù)
  // return 重定向的 字符串路徑/路徑對象
 }}
 ]
})`這里寫代碼片`

關(guān)于動態(tài)重定向的示例如下:

 { path: '/dynamic-redirect/:id?',
  redirect: to => {
  const { hash, params, query } = to
  if (query.to === 'foo') {
   return { path: '/foo', query: null }
  }
  if (hash === '#baz') {
   return { name: 'baz', hash: '' }
  }
  if (params.id) {
   return '/with-params/:id'
  } else {
   return '/bar'
  }
  }
 }

首先參數(shù)解構(gòu),獲取hash、params、query,然后根據(jù)獲取值進(jìn)行邏輯判斷之后動態(tài)路由重定向。這里的return值是path值,而不是params值,必須是一個已經(jīng)存在的path才能進(jìn)行路由重定向。而且這個path不能使自身,因為作為一個重定向路由跳轉(zhuǎn)到自身還要繼續(xù)重定向,就會進(jìn)行一個死循環(huán)。

現(xiàn)在需求如下:

為了防止用戶隨便改變路由參數(shù)而導(dǎo)致頁面崩潰,需要進(jìn)行路由重定向,將不符合要求的參數(shù)進(jìn)行重定向到一個規(guī)范頁面。比如用戶點擊按鈕跳轉(zhuǎn)/list/1但是用戶自己將1進(jìn)行改變傳遞不符合規(guī)范的參數(shù)給頁面,希望能夠在用戶改變參數(shù)值后跳轉(zhuǎn)到默認(rèn)的規(guī)范頁面

以上代碼實現(xiàn)的效果是拿到路由參數(shù),如果用戶將頁面參數(shù)改的不符合規(guī)范就進(jìn)行路由重定向。使得頁面可以獲取正確參數(shù)值?,F(xiàn)在的效果是如果用戶輸入/1則進(jìn)入正常頁面/list/1,輸入/xsajsxoal、/5、/-5 等不符合規(guī)范的參數(shù)就會跳轉(zhuǎn)進(jìn)入/list/0。

雖然重定向的邏輯是沒有問題的但問題依舊存在。那用戶繼續(xù)將/list/1改成/list/xsjknxkja怎么辦呢?

可見重定向是不適合解決這個問題的。這時就用到了vue路由的導(dǎo)航守衛(wèi)。導(dǎo)航守衛(wèi)的實現(xiàn)方式如下:

 {
  path: '/:type',
  name: 'normal',
  component: index,
  beforeEnter (to, from, next) {
  if (/^[0-3]$/.test(to.params.type)) {
   next()
  } else {
   next('/0')
  }
  }
 }

關(guān)于導(dǎo)航守衛(wèi)官方文檔描述如下:

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

記住參數(shù)或查詢的改變并不會觸發(fā)進(jìn)入/離開的導(dǎo)航守衛(wèi)。你可以通過觀察 $route 對象來應(yīng)對這些變化,或使用 beforeRouteUpdate 的組件內(nèi)守衛(wèi)。

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

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(error): (2.4.0+) 如果傳入 next 的參數(shù)是一個 Error 實例,則導(dǎo)航會被終止且該錯誤會被傳遞給 router.onError() 注冊過的回調(diào)。

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

根據(jù)需求并不需要使用到全局守衛(wèi),只需要使用到路由獨享守衛(wèi),因此只需要在路由內(nèi)添加beforeEnter然后判斷是否符合參數(shù)規(guī)范,是的話用next() 進(jìn)入下一個鉤子,否則用next(‘/')跳轉(zhuǎn)到目標(biāo)地址。

以上這篇Vue的路由動態(tài)重定向和導(dǎo)航守衛(wèi)實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中實現(xiàn)滾動加載更多的示例

    vue中實現(xiàn)滾動加載更多的示例

    下面小編就為大家?guī)硪黄獀ue中實現(xiàn)滾動加載更多的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • vue.js input框之間賦值方法

    vue.js input框之間賦值方法

    今天小編就為大家分享一篇vue.js input框之間賦值方法具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 一文詳解vue生命周期在uniapp中的用法

    一文詳解vue生命周期在uniapp中的用法

    在uniapp中,vue的生命周期的用法基本都得以保留,但是對于特殊的需求以及特殊的情況,uniapp還引入了一些特有的生命周期鉤子,本文給大家詳細(xì)介紹了vue生命周期在uniapp中的用法,感興趣的朋友可以參考下
    2024-01-01
  • vuex 第三方包實現(xiàn)數(shù)據(jù)持久化的方法

    vuex 第三方包實現(xiàn)數(shù)據(jù)持久化的方法

    本文主要介紹了vuex 第三方包實現(xiàn)數(shù)據(jù)持久化的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue3使用Vue Router實現(xiàn)前端路由控制

    Vue3使用Vue Router實現(xiàn)前端路由控制

    在現(xiàn)代Web應(yīng)用中,前端路由控制是非常重要的一部分,它可以幫助我們將不同的頁面內(nèi)容展示給用戶,同時保持用戶在瀏覽不同頁面時的連貫性,本文將介紹如何使用Vue Router來實現(xiàn)前端路由控制,需要的朋友可以參考下
    2024-10-10
  • vue項目添加多頁面配置的步驟詳解

    vue項目添加多頁面配置的步驟詳解

    公司使用 vue-cli 創(chuàng)建的 vue項目 在初始化時并沒有做多頁面配置,隨著需求的不斷增加,發(fā)現(xiàn)有必要使用多頁面配置。這篇文章主要介紹了vue項目添加多頁面配置,需要的朋友可以參考下
    2019-05-05
  • Vue項目如何設(shè)置反向代理和cookie設(shè)置問題

    Vue項目如何設(shè)置反向代理和cookie設(shè)置問題

    這篇文章主要介紹了Vue項目如何設(shè)置反向代理和cookie設(shè)置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue3動態(tài)路由刷新后空白或者404問題的解決

    vue3動態(tài)路由刷新后空白或者404問題的解決

    在vue項目中采用動態(tài)添加路由的方式,第一次進(jìn)入頁面會正常顯示,但是點擊刷新頁面后會導(dǎo)致頁面空白,所以下面這篇文章主要給大家介紹了關(guān)于vue3動態(tài)路由刷新后空白或者404問題的解決方法,需要的朋友可以參考下
    2022-07-07
  • el-table樹形表格表單驗證(列表生成序號)

    el-table樹形表格表單驗證(列表生成序號)

    這篇文章主要介紹了el-table樹形表格表單驗證(列表生成序號),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • configureWebpack、chainWebpack配置vue.config.js方式

    configureWebpack、chainWebpack配置vue.config.js方式

    這篇文章主要介紹了configureWebpack、chainWebpack配置vue.config.js方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

乌兰浩特市| 康平县| 团风县| 保靖县| 濉溪县| 南澳县| 阜新市| 全州县| 和龙市| 南丰县| 温州市| 湘西| 库尔勒市| 军事| 九寨沟县| 永吉县| 榆中县| 新津县| 盘山县| 云霄县| 二连浩特市| 祁东县| 临颍县| 濮阳县| 玉林市| 科尔| 登封市| 长白| 肥东县| 五河县| 衡水市| 互助| 大城县| 二手房| 锡林郭勒盟| 广宁县| 奉节县| 金坛市| 兴文县| 乌兰察布市| 铜山县|