美文网首页
Vue Router中的嵌套路由

Vue Router中的嵌套路由

作者: 贝罗特 | 来源:发表于2019-03-12 15:04 被阅读0次

嵌套路由

我们知道,Vue Router文档中的动态路由匹配内容中,有一个案例为:

Vue文档案例

当我们有多级目录时:例如:有用户1001和用户1002,他们分别有一个goToProfile和goToPost的选项,分别对应This is ‘User.id' Profile和This is 'User.id' Posts的内容展示。那么我们的嵌套路由大概是这样的:

嵌套层次

那么首先,搭建好基础路由结构:

const User = {

  template: `

    <div>

      <h1>User</h1>

      <div>

        <router-link to="/user/1001">User 1001</router-link>

        <router-link to="/user/1002">User 1002</router-link>

      </div>

      <router-view></router-view>

    </div>

  `

}

const UserDetail = {

  template: `

    <div>

      <h2>User Detail{{$route.params.id}}</h2>

      <router-link to="profile">User 1001</router-link>

      <router-link to="post">User 1002</router-link>   

      <router-view></router-view>

    </div>

  `

}

const UserProfile = {

  template: `

    <div>

      <h3>This is User{{$route.params.id}} Profile</h3>

      <router-view></router-view>

    </div>

  `

}

const UserPosts = {

  template: `

    <div>

      <h3>This is User{{$route.params.id}} Posts</h3>

      <router-view></router-view>

    </div>

  `

}

const router = new VueRouter({

  routes: [

    {

      path:'/user',

      component: User,

      children: [

        {

          path: '/user/:id',

          component: UserDetail,

          children: [

            {

              path: 'profile',

              component: UserProfile

            },

            {

              path: 'post',

              component: UserPosts

            }

          ]

        }

      ]

    }

  ]

})

new Vue({

  el:'#app',

  router

})

index.html中结构

我们在网页中可以得到基础的结构

点击User 1001后,路径和对应模板展示出来

结果如图

对应的,User 1002展示的模板为User Detail1002。接下来,想展示第三层嵌套路由,发现并不是我们所实际的那样,出现This is User{{$route.params.id}} Profile的内容,反而在第二层中替换了我们的 Detail1002,原因是我们的url地址被所点击的内容替换了。说明我们使用的跳转路径出现了问题

结果如图

解决办法

思路

首先,我们使用Router的$route属性查看路由内容,创建一个方法:

beforeUpdate() {

    console.log(this.$route)

  }

输出如下内容

我们想得到的结果在params属性中,有一个对象为{id:'profile},说明此时我们我们原来应该有的1001id被替换了。

修改to中的url

这时,我们有一个思路,就是更改url地址,虽然上图得到结果,但是存在一定的问题。说明并不是正确的解决办法。

解决

在<template>中,我们使用<a>标签来代替<router-link to>的使用。能很好解决这个问题

在上面提到了,$route中的params对象里有一个为id的方法,那么我们先把它取到:

得到对应User的id

然后,我们把每次对应的id拼接到url中,那么我们每次所点击的跳转内容,就是我们想要得到的每个User.id所对应的下级嵌套路由中的内容

结果如图

最终,完美解决这个问题

小伙伴们有更好的解决办法欢迎提出,谢谢~

2019-03-13修改:click时间的修饰符

昨天发现在点击对应的路径后,URL地址并没有做相应的跳转,这样的结果并不是我们想要的。于是查看官方文档API后,发现需要使用.prevent修饰符来阻止默认<a>标签的href="#"跳转行为,于是我们加上。

添加修饰符prevent url路径正确显示

那么到此,这个问题就成功解决了

相关文章

  • 手写 Vue Router、手写响应式实现、虚拟 DOM 和 D

    Vue-Router 原理实现 一、Vue-Router 动态路由 二、Vue-Router 嵌套路由 三、Vue...

  • 前端理论面试-router+axios

    Vue Router Vue Router 是 Vue.js 官方的路由管理器。 包含的功能有: 嵌套的路由/视图...

  • vue路由

    路由:vue-router 案例: 1.路由 2.路由的嵌套

  • vue-router 常用知识点一

    目录 - 1.vue-router响应 路由参数 的变化 - 2.vue-router如何定义嵌套路由? - 3....

  • 6 VUE路由

    vue-> SPA应用,单页面应用(引入vue-router.js) 路由嵌套(多层路由): 路由其他信息:

  • vue-router

    前端路由的基本原理 vue-router的基本使用 命名路由 路由参数 嵌套路由

  • vue 第八章

    路由1.路由下载用gitnpm install vuenpm install vue-router 2.路由嵌套嵌...

  • Vue-基础-05-重点

    Vue-基础-day05-重点 01-基础-路由-vue-router-嵌套路由 children用法和route...

  • 8月第二周

    8.7 vue-cli vue-router 用法总结: 包含默认路由的地址写法,父子路由的嵌套,redirec...

  • Vue Router 警告 ”[vue-router] Name

    如上代码,vue中使用路由嵌套调试时控制台给出以下警告 vue-router.png翻译:命名路由“home”具有...

网友评论

      本文标题:Vue Router中的嵌套路由

      本文链接:https://www.haomeiwen.com/subject/hnzgpqtx.html