Vue 路由 04

Vue 路由

嵌套路由

  在路由里面嵌套他的子路由,其关键属性时 children,children 也是路由的一种,它可以像 routes 一样去配置路由数组。每个字路由里面可以嵌套多个组件。子组件又有路由导航和路由容器。

<router-link to="/父路由/子路由"></router-link>

  使用 children 实现子路由时,子路由的 path 不带 '/',否则会永远以根路径开始请求,不方便用户去理解 URL 地址

var router = new VueRouter({
    routes: [
        {
            path: '/home',
            component: home,
        },
    children: [
        { path: 'login', component: login },
        { path: 'register', component: register }
            ]
        }
    ]
})

 

  嵌套路由案例

<body>
<div id="app">
    <ul>
        <router-link to="/about" tag="li">关于公司</router-link>
        <router-link to="/contact" tag="li">联系我们</router-link>
    </ul>
    <router-view></router-view>
</div>
</body>

<template id="about-tmp">
    <div class="about-detail">
        <h1>北京 XX 科技有限公司</h1>
        <router-link to="/about/detail">公司简介</router-link>
        |
        <router-link to="/about/governance">公司治理</router-link>
        <router-view></router-view>
    </div>
</template>

<template id="contact-tmp">
    <div class="about-detail">
        <h1>联系我们</h1>
        <p> 公司位于北京市海淀区中关村科技园内,主营业务包括餐饮娱乐,服装设计等 </p>
    </div>
</template>

<script>
    // 组件的模板对象
    var about = {template: '#about-tmp'}
    var contact = {template: '#contact-tmp'}

    // 子路由组件模板对象
    var detail = {
        template: '<p>xx 是全球领先......</p>'
    }
    var governance = {
        template: '<p>公司坚持以客户为中心,以奋斗为本......</p>'
    }

    var router = new VueRouter({
        routes: [
            // 父路由 path 属性 要加 '/'
            {path: '/', redirect: '/about'}, // 路由重定向
            {
                path: '/about',
                component: about,
                // 子路由 path 属性不加 '/'
                children: [
                    {path: 'detail', component: detail},
                    {path: 'governance', component: governance}
                ]
            },
            {path: '/contact', component: contact}
        ]
    })

    var vm = new Vue({
        el: '#app',
        router // 挂载路由
    })
</script>

<style>
    ul, li, h1 {
        padding: 0;
        margin: 0;
        list-style: none
    }

    #app {
        width: 100%;
        display: flex;
        flex-direction: row;
    }

    ul {
        width: 200px;
        flex-direction: column;
        color: #fff;
    }

    li {
        flex: 1;
        background: #000;
        margin: 5px auto;
        text-align: center;
        line-height: 30px;
    }

    .about-detail {
        flex: 1;
        margin-left: 30px;
    }

    .about-detail h1 {
        font-size: 24px;
        color: blue;
    }

</style>

 

上一篇:2021-05-15


下一篇:前端开发之vue-router路由设置