Vue-Router嵌套路由children的使用

一、原理

 嵌套路由就是父路由中嵌套他的子路由,父路由中有自己的路由导航和路由容器(router-link、router-view)(前者用于跳转,后者用于显示且必须位于父路由中)(前者可以没有,后者不能没有,否则进行跳转后路径会变化,但页面不发生变化)。
 嵌套路由使用于实现页中页效果,如若依框架中的首页、用户管理等页面的显示。

纯Vue项目演示

路由配置(router/index.js)

import Vue from 'vue'
import VueRouter from 'vue-router'
import User from '../views/user/User'
import Login from '../views/user/Login'
import Register from '../views/user/Register'
 
Vue.use(VueRouter)
 
const routes = [
  {
    path: '/',
    name: 'Home',
    redirect: User
  },
  {
    path: '/user',
    name: 'User',
    component: User,
    children: [
      {
        path: 'login',
        name: 'Login',
        component: Login
      },
    ]
  }
]
 
const router = new VueRouter({
  routes
})
 
export default router

用户页面(父页面、User.vue)

<template>
  <div class="outer">
    <h2>这是用户页面</h2>
    <router-link :to="{name: 'Login'}">登录</router-link> |
    <router-view></router-view>
  </div>
</template>
 
<script>
export default {
  name: 'User'
}
</script>
 
<style scoped>
.outer {
  margin: 20px;
  border: 2px solid red;
  padding: 20px;
}
</style>

登陆页面(子页面、Login.vue)

<template>
  <div class="outer">
    <h3>这是登录页面</h3>
  </div>
</template>
 
<script>
export default {
  name: 'Login'
}
</script>
 
<style scoped>
.outer {
  margin: 20px;
  border: 2px solid blue;
  padding: 20px;
}
</style>

这样打开父页面和点击登录出现子页面效果如下:
在这里插入图片描述
在这里插入图片描述
(注意:若在childeren的path中加’/',则不需要加父路由的路径即可访问子组件)(eg:当path: 'login',改为path: '/login',时,路径显示如下,没有了user)
在这里插入图片描述

二、Vue中首页显示分析

 由中的获取角色路由和动态权限后的首页数据加载可知,在若依框架中也使用了嵌套路由来完成页中页的显示。
 首先看index.js中定义的路由,显示定向转到Layout中的index.vue页面,然后通过重定向,使用children路由功能进行跳转,去寻找父路由(其路径为component所导入内容)。
在这里插入图片描述

 再看至index.vue中,AppMain、Navbar和Sidebar等内容是从components中引入的,再观察这些文件内的内容,发现下图这几个标签对应着引入的包,且仅有AppMain.vue中有router-view标签,并设定了唯一的key值,从而使得每次路由来回切换时,都会重新渲染组件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
 这里我们将this.&route.path在控制台进行输出,可发现其显示的要么是index页面(前者对应首页),要么是该路径下的index页面(后者对应个人中心)。(这里的$route.path内容为children外的path加children内的path内容,即在index.js中传过来的内容)
在这里插入图片描述
在这里插入图片描述

三、使用规范

  • children中path与name的内容一致(除’/'在path中的使用),为了给route-view提供组件,实现页中页效果。
  • AppMain中的transition标签定义了页之间切换动画以及组件的过度;keep-alive标签是配合route-view标签使用的,使组件能够保存状态,避免重新渲染。
  • children中的meta标签,简单而言是路由元信息(每个路由所携带的信息),它可通过meta中的一些属性来判断当前路由是否需要进一步处理,若需要处理,则可按照自己所设定的效果进行。
  • 一个路由匹配到的所有路有记录会暴露为$ route对象,因而$ router.path中有访问的url路径则不足为奇。并且可以通过$ meta.matched数组来检查路由记录中的meta字段,首页标签的显示如下图及代码所示:
    在这里插入图片描述在这里插入图片描述
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue Router 是一个官方提供的 Vue.js路由管理器,可以用于构建单页面应用程序。嵌套路由是指在一个路由的组件中使用另一个路由。 在 Vue Router 中,可以通过在路由配置文件中定义嵌套路由嵌套路由配置是以树形结构来组织的,父级路由将会嵌套渲染其子路由的组件。 下面是一个示例的路由配置文件,演示了如何使用嵌套路由: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ { path: '/', component: Home, children: [ { path: '', component: Dashboard }, { path: 'about', component: About }, { path: 'products', component: Products, children: [ { path: '', component: ProductList }, { path: ':id', component: ProductDetail } ] } ] } ] const router = new VueRouter({ routes }) export default router ``` 在上面的代码中,父级路由 '/' 下包含了三个子路由:Dashboard、About 和 Products。而 Products 路由又包含了两个子路由:ProductList 和 ProductDetail。 在组件中使用嵌套路由时,需要在父级组件中使用 `<router-view>` 标签来渲染子路由的内容。 ```html <template> <div> <h1>Home</h1> <router-view></router-view> </div> </template> ``` 在父级组件的模板中,通过使用 `<router-view>` 标签,子路由的内容将会被渲染在这个位置。 这就是 Vue Router 中嵌套路由的基本使用方法。通过嵌套路由,可以更好地组织和管理应用程序的路由结构,实现更复杂的页面布局和导航功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值