随着Vue单页应用(SPA)变得复杂 需要使用路由嵌套
路由嵌套允许更复杂的用户界面以及相互嵌套的组件
如果对Vue的路由不太熟悉 请参看我的另一篇博客:Vue学习之旅Part9:使用vue-router实现前端路由和参数传递
路由嵌套 即路由的组件内部还有子组件 适用于很多业务场景
实现路由嵌套的步骤比较简单
首先 在路由对象里定义子路由:
子路由的path命名需注意:子路由的path路径前面不能加斜杠
子路由的path前面会自动拼上父路由的path
<script>
// 定义组件模板对象
var account={
template:"#tmpl"
}
var login={
template:"<h3>登录</h3>"
}
var register={
template:"<h3>注册</h3>"
}
// 路由对象
var router=new VueRouter({
routes:[
{
path:"/account",
component:account,
// 子路由
children:[
// 子路由的path前面不能加斜杠 path前面会自动拼上父路由的path
{path:"login",component:login}, // /account/login
{path:"register",component:register} // /account/register
]
}
]
})
var vm=new Vue({
el:'#app',
data:{},
methods:{},
// 挂载路由对象
router
});
</script>
然后 定义组件:
不仅要在Vue实例的管理区放置一个<router-view>
还需在组件内部放置一个<router-view>
实现路由的嵌套
组件内部的<router-view>
显示的是子组件的内容
拿下方的例子来说:
<router-link to="/account/login">登录</router-link>
当点击登录标签之后 vue-router匹配到路径为/account
的路由对象内部的路径为login
的子路由时
组件内的<router-view></router-view>
将会显示出预先定义({path:"login",component:login}
)的login组件
/account/login代表的是 路由/account里的login
两个path拼接而成
<!-- 定义组件的内容 -->
<template id="tmpl">
<div>
<h1>账户管理</h1>
<router-link to="/account/login">登录</router-link>
<router-link to="/account/register">注册</router-link>
<!-- 子路由的内容显示在此处 -->
<router-view></router-view>
</div>
</template>
<!-- 实例管理区 -->
<div id="app">
<router-link to="/account">前往账户管理</router-link>
<!-- 父路由的内容显示在此处 -->
<router-view></router-view>
</div>