Nested <router-view>- does it work when prefixed with static path??
by Admiral Potato
HTML
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
<nav>
<router-link to="/">/(root)</router-link>
<router-link to="/party">/party</router-link>
<router-link to="/goat/Gruff">Gruff Home</router-link>
<router-link to="/goat/Gruff/profile">Gruff Profile</router-link>
<router-link to="/goat/Gruff/posts">Gruff Posts</router-link>
<router-link to="/goat/Faun">Faun Home</router-link>
<router-link to="/goat/Faun/profile">Faun Profile</router-link>
<router-link to="/goat/Faun/posts">Faun Posts</router-link>
</nav>
<router-view></router-view>
</div>
CSS
nav a {
display: block;
background-color: #eee;
padding: 4px;
margin: 2px;
}
.goats {
background-color: #efe;
padding: 8px;
margin: 2px;
}
.user {
background-color: #fef;
padding: 8px;
margin: 2px;
}
Babel + JSX
const Goats = {
template: `
<div class="goats">
<h2>Goats!</h2>
<router-view></router-view>
</div>
`
}
const GoatsList = { template: `
<div>
<div>There are goats in the house</div>
<nav>
<router-link to="/goat/Gruff">Gruff</router-link>
<router-link to="/goat/Faun">Faun</router-link>
</nav>
</div>` }
const GoatsParty = { template: '<div>GOAT PARTY IN THE HOUSE</div>' }
const User = {
computed: {
id () {
return this.$route.params.id
},
},
template: `
<div class="user">
<h2>User {{ id }}</h2>
<nav>
<router-link :to="'/goat/' + id">Home</router-link>
<router-link :to="'/goat/' + id + '/profile'">Profile</router-link>
<router-link :to="'/goat/' + id + '/posts'">Posts</router-link>
</nav>
<router-view></router-view>
</div>
`
}
const UserHome = { template: '<div>Home</div>' }
const UserProfile = { template: '<div>Profile</div>' }
const UserPosts = { template: '<div>Posts</div>' }
const router = new VueRouter({
routes: [
{
path: '/',
component: Goats,
children: [
// UserHome will be rendered inside User's <router-view>
// when /user/:id is matched
{ path: '', component: GoatsList },
// UserProfile will be rendered inside User's <router-view>
// when /user/:id/profile is matched
{ path: 'party', component: GoatsParty },
]
},
{
path: '/goat/:id',
component: User,
children: [
// UserHome will be rendered inside User's <router-view>
// when /user/:id is matched
{ path: '', component: UserHome },
// UserProfile will be rendered inside User's <router-view>
// when /user/:id/profile is matched
{ path: 'profile', component: UserProfile },
// UserPosts will be rendered inside User's <router-view>
// when /user/:id/posts is matched
{ path: 'posts', component: UserPosts }
]
}
]
})
const app = new Vue({...