Vue router重定向redirect如何傳值問題
Vue router重定向redirect如何傳值
配置 vue_router 時, 很經(jīng)常就用到重定向(redirect)功能
例如:
沒登錄重定向到登錄頁面(導(dǎo)航衛(wèi)士攔截也是高效的登錄檢查方法)
index, home, house 重定向到首頁等
重定向 redirect 可接受的值
字符串
字符串作為 path 傳入, 相當于 { path: redirect }
{ ... redirect: "/assets/assetsIndex", ... } // 相當于 { ... redirect: { path: '/assets/assetsIndex' }, ... }
對象
先判斷有沒有 name
有 name
發(fā)起跳轉(zhuǎn)處提供的 name, query, hash, params 會往下傳
如果 redirect 也提供了這些屬性則用 redirect 提供的往下傳
redirect: { name: 'assetsIndex', params: { id: 'redirect' }, } // redirect 提供了 params, 目標組件可以收到該 params 數(shù)據(jù) // redirect 沒有提供, 目標組件收到發(fā)起跳轉(zhuǎn)處的數(shù)據(jù)(發(fā)起跳轉(zhuǎn)是有數(shù)據(jù)的話)
沒有 name, 就找 path
計算后的 path 和 query, hash 會往下傳
如果 redirect 也提供了這些屬性則用 redirect 提供的往下傳
redirect: { path: 'assetsIndex', query: { id: 'redirect' }, }
方法
方法必須 return 一個字符串
return 的內(nèi)容最終作為 path 往下傳
所以提供的 params 將無效
redirect: function (to) { return 'assetsIndex' }
這些不需要傳參的情況, 直接設(shè)置為目標地址的字符串就可以
{ path: "/assets", component: layout, redirect: "/assets/assetsIndex", }
如果你遇到的需求需要傳值的話, 可以參考下面的方法
query 帶參跳轉(zhuǎn)
query 直接帶參就可以了, 缺點是地址中會暴露參數(shù)
// 發(fā)起跳轉(zhuǎn) this.$router.push({ name: 'assets', query: { val: 'val值' } }) /* or */ this.$router.push({ path: '/assets', query: { id: '編程式_id' } }) /* or */ this.$router.push("/assets?id=編程式_id") // 重定向 { path: "/assets", name: "assets", redirect: "/assetsHome", } // 目標路由 { path: "/assetsHome", component: assetsHome, }, // 目標組件中取值 this.$route.query
params 帶參跳轉(zhuǎn)
params 帶參相對麻煩, 因為"如果提供了 path,params 會被忽略"在 redirect 中也是成立的
所以我們可以知道, 不可以用 path 來設(shè)置路由
而 params 帶參的好處當然就是可以在地址隱藏參數(shù)了
// 發(fā)起跳轉(zhuǎn) this.$router.push({ name: 'assets', params: { id: '編程式_id' } }) // 重定向 { path: "/assets", name: "assets", redirect: { name: 'assetsHome' }, } // 目標路由 { path: "/assetsHome", name: "assetsHome", component: assetsHome, } // 目標組件中取值 this.$route.params
動態(tài)路徑帶參跳轉(zhuǎn)
本來是不想寫這個方法的, 因為筆者本來就很討厭動態(tài)路徑帶參, 覺得那個方法局限性太大, 加一個參數(shù)很麻煩, 還要順序要求
為了不要被讀者吐槽我懶(敲代碼本來就是為了偷懶嘛), 還是稍微寫一下
// 發(fā)起跳轉(zhuǎn) this.$router.push({ path: '/assets/編程式_id' }) // 重定向 { path: "/assets/:id", name: "assets", redirect: { name: 'assetsHome' }, } // 目標路由 { path: "/assetsHome/:id", name: "assetsHome", component: assetsHome, } // 目標組件中取值 this.$route.params
[題外話] 重定向和別名的區(qū)別
重定向是進入 a, 然后自動跳轉(zhuǎn)到 b
a 和 b 都是真實的路由地址, 這個過程經(jīng)過兩地址, 只是 a 不會被記錄
別名是進入 a, 實際上是進入 b
a 不是真實的路由地址, 這個過程自始至終都只是在 b 地址
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue攔截器實現(xiàn)統(tǒng)一token,并兼容IE9驗證功能
這篇文章主要介紹了vue攔截器實現(xiàn)統(tǒng)一token,并兼容IE9驗證功能,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2018-04-04Vue如何實現(xiàn)文件預(yù)覽和下載功能的前端上傳組件
在Vue.js項目中,使用ElementUI的el-upload組件可以輕松實現(xiàn)文件上傳功能,通過配置組件參數(shù)和實現(xiàn)相應(yīng)的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-09-09vue中 process.env與process.VUE_CLI_SERVICE詳解
這篇文章主要介紹了vue中process.env與process.VUE_CLI_SERVICE的相關(guān)資料,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05vue3實現(xiàn)無縫滾動列表效果(大屏數(shù)據(jù)輪播場景)
vue3-scroll-seamless 是一個用于 Vue 3 的插件,用于實現(xiàn)無縫滾動的組件,它可以讓內(nèi)容在水平或垂直方向上無縫滾動,適用于展示輪播圖、新聞滾動、圖片展示等場景,本文就給大家介紹了vue3實現(xiàn)無縫滾動列表效果,需要的朋友可以參考下2024-07-07vue.js組件vue-waterfall-easy實現(xiàn)瀑布流效果
這篇文章主要為大家詳細介紹了vue.js實現(xiàn)瀑布流之vue-waterfall-easy的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08