如何通过Vue-router实现二级路由到子级路由的跳转?
- 内容介绍
- 文章标签
- 相关推荐
本文共计919个文字,预计阅读时间需要4分钟。
目录 + Vue-router二级路由跳转及子级路由结果 + 实验项目 + Vue二级路由跳转一级路由激活处理 + 以下是处理Vue-router二级路由跳转的思路:
在实验项目中,当在/list/us路径下进行二级路由跳转时,可以通过以下步骤实现:
1. 在Vue-router配置中设置二级路由,并指定对应的组件。
2.使用``标签或编程式导航进行跳转。
3.在一级路由组件中监听路由变化,当二级路由跳转时,执行相应的激活处理逻辑。
以下是具体的处理方法:
- Vue-router二级路由跳转时,在一级路由组件中监听`$route`对象的变化。
- 当检测到二级路由变化时,执行激活处理逻辑,如更新数据、显示或隐藏元素等。- 通过这种方式,可以确保在二级路由跳转时,一级路由能够正确地响应并进行相应的处理。目录
- Vue-router二级路由跳转另一条路由下的子级
- 结果
- 实验
- vue二级路由跳转一级路由激活处理
- 本人是这么处理的
Vue-router二级路由跳转另一条路由下的子级
实验项目中,在一个 /list/user 列表中,当点击某一条时,需要跳转到 /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 组件中,采用编程式导航的方式跳转,写法如下:
this.$router.push({name:detail-user, path:`/ue/matter/detail/user/${userid}/user}`);
或者如下
this.$router.push({name: detail-user});
结果
组件内容确实更换了,但浏览器上的地址栏错了
实验
看官方文档说,path+params地方式会被忽略,所以将router.push中用到的键path、params、name、query分别组合做了一个页面,来测试哪种会不可以。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta unpkg.com/vue/dist/vue.js"></script> <script src="unpkg.com/vue-router/dist/vue-router.js"></script> <script> const Home = { template: '<div>Home path单独 <span v-on:click="change()">点击跳转到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>
结论:
结果是:除了path+params之外,params+query也不可以,因为没有告知路径信息
那对于上面涉及二级跳转,那写name + path的方式,我理解的是path需要拼接,所以给了name就会找不到路径。我之后的修改是,只传给push一个字符串路径。
this.$router.push(`/ue/matter/detail/user/${userid}/user`)
vue二级路由跳转一级路由激活处理
有时候有的页面是一个页面的子页面,这时候点击打开跳转到二级页面,这个时候
一级导航的路由可能激活状态不对应
本人是这么处理的
<el-menu :default-active="$route.path.match('(/[a-z]+[^/]){1}')[0]"
这样就可以匹配目标页面的路由匹配头部就聚焦
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。
本文共计919个文字,预计阅读时间需要4分钟。
目录 + Vue-router二级路由跳转及子级路由结果 + 实验项目 + Vue二级路由跳转一级路由激活处理 + 以下是处理Vue-router二级路由跳转的思路:
在实验项目中,当在/list/us路径下进行二级路由跳转时,可以通过以下步骤实现:
1. 在Vue-router配置中设置二级路由,并指定对应的组件。
2.使用``标签或编程式导航进行跳转。
3.在一级路由组件中监听路由变化,当二级路由跳转时,执行相应的激活处理逻辑。
以下是具体的处理方法:
- Vue-router二级路由跳转时,在一级路由组件中监听`$route`对象的变化。
- 当检测到二级路由变化时,执行激活处理逻辑,如更新数据、显示或隐藏元素等。- 通过这种方式,可以确保在二级路由跳转时,一级路由能够正确地响应并进行相应的处理。目录
- Vue-router二级路由跳转另一条路由下的子级
- 结果
- 实验
- vue二级路由跳转一级路由激活处理
- 本人是这么处理的
Vue-router二级路由跳转另一条路由下的子级
实验项目中,在一个 /list/user 列表中,当点击某一条时,需要跳转到 /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 组件中,采用编程式导航的方式跳转,写法如下:
this.$router.push({name:detail-user, path:`/ue/matter/detail/user/${userid}/user}`);
或者如下
this.$router.push({name: detail-user});
结果
组件内容确实更换了,但浏览器上的地址栏错了
实验
看官方文档说,path+params地方式会被忽略,所以将router.push中用到的键path、params、name、query分别组合做了一个页面,来测试哪种会不可以。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta unpkg.com/vue/dist/vue.js"></script> <script src="unpkg.com/vue-router/dist/vue-router.js"></script> <script> const Home = { template: '<div>Home path单独 <span v-on:click="change()">点击跳转到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>
结论:
结果是:除了path+params之外,params+query也不可以,因为没有告知路径信息
那对于上面涉及二级跳转,那写name + path的方式,我理解的是path需要拼接,所以给了name就会找不到路径。我之后的修改是,只传给push一个字符串路径。
this.$router.push(`/ue/matter/detail/user/${userid}/user`)
vue二级路由跳转一级路由激活处理
有时候有的页面是一个页面的子页面,这时候点击打开跳转到二级页面,这个时候
一级导航的路由可能激活状态不对应
本人是这么处理的
<el-menu :default-active="$route.path.match('(/[a-z]+[^/]){1}')[0]"
这样就可以匹配目标页面的路由匹配头部就聚焦
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

