iT邦幫忙

1

Day33 - 同一個路徑載入兩個頁面元件

如果我們想要在 App.vue 執行兩個 <router-view> 是否可行 ?
答案是可以的

我們先到 App.vue 在原先的 <router-view> 外圍增加一個 .container 來增加最大寬的限制,之後在外面也新增一個 <router-view> 並給予 name 屬性:

<template>
    <div id="app">
        <nav>...</nav>
        <router-view name="menu"></router-view>
        <div class="container">
            <router-view></router-view>
        </div>
    </div>
</template>

接著我們把 page.vue 另存新檔成 menu.vue
page.vue 留下:

<template>
    <div class="hello">
        <div class="card" style="width: 18rem;">
            <router-view></router-view>
        </div>
    </div>
</template>

menu.vue 留下:

<template>
    <div class="hello">
        <ul class="nav">
            <li class="nav-item">
                <router-link class="nav-link" to="/page">卡片1</router-link>
            </li>
            <li class="nav-item">
                <router-link class="nav-link" to="/page/child2">卡片2</router-link>
            </li>
            <li class="nav-item">
                <router-link class="nav-link" to="/page/child3">卡片3</router-link>
            </li>
        </ul>
    </div>
</template>

這樣做的用意,是本來在 page 下的卡片選單移到 menu.vue 去,且只有在 page 頁下會呈現
接著我們回到 router/index.js 載入 menu.vue

import Menu from '@/components/page/menu'

接著在下方的 exportpage 元件路徑修改一下,主要把 component 改成 components 可以用物件的型式掛載多個元件:

export default new VueRouter({
    routes: [
        {
            name: '首頁',
            path: '/index',
            component: Home,
        },
        {
            name: '分頁',
            path: '/page',
            components: {
                default: Page,
                menu: Menu,
            },
            children: [
                {
                    name: 'child 1',
                    path: '',   
                    component: child1,
                },
                {
                    name: 'child 2',
                    path: 'child2',   
                    component: child2,
                },
                {
                    name: 'child 3',
                    path: 'child3',   
                    component: child3,
                }
            ],
        }
    ]
});

components 物件內的屬性的 default 是預設的元件內容,menu 則是我們剛剛把第二個 <router-view> 取名的 name 屬性,掛載的元件就是剛剛製作的 menu.vue
這樣就可以達到我們所希望的效果了


尚未有邦友留言

立即登入留言