在Vue中通过vue-router实现路由嵌套

随着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>

发布了210 篇原创文章 · 获赞 21 · 访问量 78万+

猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/105687390
今日推荐