使用Vue-router二級路由跳轉(zhuǎn)另一條路由下的子級
Vue-router二級路由跳轉(zhuǎn)另一條路由下的子級
實驗項目中,在一個 /list/user 列表中,當點擊某一條時,需要跳轉(zhuǎn)到 /detail/userId/user 詳情下,展示詳情信息。
router.js
const routes = [ { path: '/ue/matter/list', name: 'list', component: List, children: [ { path: 'user', name: 'list-user', component: ListUser }, ], props: true }, { path: '/ue/matter/detail/:userId', name: 'detail', component: Detail, children: [ { path: 'user', name: 'detail-user', component: DetailUser }, ], props: true } ]
ListUser 組件中,采用編程式導航的方式跳轉(zhuǎn),寫法如下:
this.$router.push({name:detail-user, path:`/ue/matter/detail/user/${userid}/user}`);
或者如下
this.$router.push({name: detail-user});
結(jié)果
組件內(nèi)容確實更換了,但瀏覽器上的地址欄錯了
實驗
看官方文檔說,path+params地方式會被忽略,所以將router.push中用到的鍵path、params、name、query分別組合做了一個頁面,來測試哪種會不可以。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>router-linkto</title> <link rel="stylesheet" href=""> </head> <body> <div id="app"> <router-link :to="{ path: 'home' }">path單獨 </router-link> <router-link :to="{ path: 'foo', name: foo}">path + name </router-link> <router-link :to="{ path: 'bar', query: {plan:'private'} }">path + query /bar?plan="private"</router-link> <router-link :to="{ name: 'user', params: {userId:123} }">name + params /user/123</router-link> <router-link :to="{ name: 'many', query: {plan:'private'} }">name + query </router-link> <router-link :to="{ params: { userId: 123 }, query: {plan: 'private'} }">params + query </router-link> <br/> <br/> <router-view></router-view> </div> </body> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> <script> const Home = { template: '<div>Home path單獨 <span v-on:click="change()">點擊跳轉(zhuǎn)到path+name</span> </div>', methods: { change: function() { this.$router.push({name: "foo", path: "/foo"}) } } } const Foo = { template: "<div>Foo path+name</div>"} const Bar = { template: "<div>Bar path+query</div>"} const User = { template: "<div>User {{$route.params.userId}}</div>" } const Many = { template: "<div>Many name+params</div>" } const Too = { template: "<div>Too params + query</div>" } const router = new VueRouter({ routes: [ { path: "/home", component: Home }, { name: "foo", path: "/foo", component: Foo }, { path: "/bar", component: Bar }, { name: "user", path: "/user/:userId", component: User }, { path: "/many", name: "many", component: Many }, { path: "/too/:userId", component: Too } ] }) new Vue({ el: '#app', router }) </script> </html>
結(jié)論:
結(jié)果是:除了path+params之外,params+query也不可以,因為沒有告知路徑信息
那對于上面涉及二級跳轉(zhuǎn),那寫name + path的方式,我理解的是path需要拼接,所以給了name就會找不到路徑。我之后的修改是,只傳給push一個字符串路徑。
this.$router.push(`/ue/matter/detail/user/${userid}/user`)
vue二級路由跳轉(zhuǎn)一級路由激活處理
有時候有的頁面是一個頁面的子頁面,這時候點擊打開跳轉(zhuǎn)到二級頁面,這個時候
一級導航的路由可能激活狀態(tài)不對應
本人是這么處理的
<el-menu :default-active="$route.path.match('(/[a-z]+[^/]){1}')[0]"
這樣就可以匹配目標頁面的路由匹配頭部就聚焦
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue瀏覽器緩存sessionStorage+localStorage+Cookie區(qū)別解析
這篇文章主要介紹了Vue瀏覽器緩存sessionStorage+localStorage+Cookie區(qū)別解析,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09解決vue+webpack項目接口跨域出現(xiàn)的問題
這篇文章主要介紹了解決vue+webpack項目接口跨域出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08關(guān)于Uncaught(in?promise)TypeError:?list?is?not?iterable報錯
這篇文章主要給大家介紹了關(guān)于Uncaught(in?promise)TypeError:?list?is?not?iterable報錯的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08Vue項目中使用WebUploader實現(xiàn)文件上傳的方法
WebUploader是由 Baidu WebFE(FEX) 團隊開發(fā)的一個簡單的以 HTML5為主 , FLASH為輔 的現(xiàn)代 文件上傳組件 。這篇文章主要介紹了在Vue項目中使用WebUploader實現(xiàn)文件上傳,需要的朋友可以參考下2019-07-07vue element-ui里的table中表頭與表格出現(xiàn)錯位的解決
這篇文章主要介紹了vue element-ui里的table中表頭與表格出現(xiàn)錯位的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08vuex直接修改state、commit和dispatch修改state的用法及區(qū)別說明
這篇文章主要介紹了vuex直接修改state、commit和dispatch修改state的用法及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08vue-router中query和params的區(qū)別解析
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構(gòu)建單頁面應用,這篇文章主要介紹了vue-router中query和params的區(qū)別 ,需要的朋友可以參考下2022-10-10