命名视图实现经典布局(展示多个同级组件)

2019-04-29  本文已影响0人  小丘啦啦啦

之前只有一个页面展示一个组件(不包括路由嵌套的组件),如果需要同一个URL同时展示多个组件,则路由规则使用components属性,设置不同的<router-view></router-view>(指定不同的name名称)展示不同组件,可以设置默认展示和不同名称的容器展示不同的组件。

<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <!-- 导入vue路由的包 -->
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .header {
            height: 80px;
            background-color: orange;
        }

        .container {
            display: flex;
            height: 600px;
        }

        .left {
            background-color: lightgreen;
            flex: 2;
        }

        .main {
            background-color: lightpink;
            flex: 8;
        }
    </style>
</head>

<body>
    <div id='app'>
        <!-- 默认容器 -->
        <router-view></router-view>
        <!-- 使用css3的flex布局,包起来 -->
        <div class="container">
            <!-- 给容器指定name名称,加载对应组件 -->
            <router-view name="left"></router-view>
            <!-- 给容器指定name名称,加载对应组件 -->
            <router-view name="main"></router-view>
        </div>
    </div>
    <template id="headerBox">
        <h1 class="header">headerBox组件</h1>
    </template>
    <template id="leftBox">
        <h1 class="left">leftBox组件</h1>
    </template>
    <template id="mainBox">
        <h1 class="main">mainBox组件</h1>
    </template>
    <script>
        var headerBox = {
            template: '#headerBox',
        }
        var leftBox = {
            template: '#leftBox'
        }
        var mainBox = {
            template: '#mainBox'
        }
        var router = new VueRouter({
            routes: [{
                path: '/',
                components: { //components同时展示多个组件,多了个s
                    default: headerBox, //默认容器放headerBox组件
                    left: leftBox, //name为left的容器放leftBox组件
                    main: mainBox //name为main的容器放leftBox组件
                }
            }, ]
        });
        var vm = new Vue({
            el: "#app",
            data: {

            },
            router
        });
    </script>
</body>

</html>
上一篇 下一篇

猜你喜欢

热点阅读