vue-router菜鸟进阶!(嵌套路由VS命名路由)

嵌套路由

一个被渲染组件可以包含自己的嵌套< router-view >。

在嵌套的出口中渲染组件,需要在VueRouter的参数中使用children配置:

<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">
  <p>
    <router-link to="/user/foo">/user/foorouter-link>
    <router-link to="/user/foo/profile">/user/foo/profilerouter-link>
    <router-link to="/user/foo/posts">/user/foo/postsrouter-link>
  p>
  <router-view>router-view>
div>
const User = {
  template: `
    
"user">

User {{ $route.params.id }}

` } const UserHome = { template: '
Home
'
} const UserProfile = { template: '
Profile
'
} const UserPosts = { template: '
Posts
'
} const router = new VueRouter({ routes: [ { path: '/user/:id', component: User, children: [ // UserHome will be rendered inside User's // when /user/:id is matched { path: '', component: UserHome }, // UserProfile will be rendered inside User's // when /user/:id/profile is matched { path: 'profile', component: UserProfile }, // UserPosts will be rendered inside User's // when /user/:id/posts is matched { path: 'posts', component: UserPosts } ] } ] }) const app = new Vue({ router }).$mount('#app')

要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。


命名路由

有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。可以在创建Router实例的时候,在routes配置中给某个路由设置名称。

const router = new VueRouter({
    routes: [
        {
            path: '/user/:user:id',
            name: 'user',
            component: User
        }
    ]
})

要链接到一个命名路由,可以给router-link的to属性传一个对象:

:to="{ name: 'user', params: { userId: 123 }}">User

跟代码调用 router.push()是一回事:

router.push({ name: 'user', params: { userId: 123 }})

这两种方式都会把路由导航到/user/123路径。

For example:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const Home = { template: '<div>This is Homediv>' }
const Foo = { template: '<div>This is Foodiv>' }
const Bar = { template: '<div>This is Bar {{ $route.params.id }}div>' }

const router = new VueRouter({
    mode: 'history',
    base: __dirname,
    routes: [
        { path: '/',  name: 'home', component: Home },
        { path: '/foo', name: 'foo', component: Foo },
        { path: '/bar', name: 'bar', component: Bar }
        ]
    })

new Vue({
    router,
    template: `
        <div id="app">
            <h1>Named Routesh1>
            <p>Current route name: {{ route.name }}p>
            <ul>
                <li><router-link :to="{ name: 'home' }">Homerouter-link>li>
                <li><router-link :to="{ name: 'foo' }">foorouter-link>li>
                <li><router-link :to="{ name: 'bar', params: { id: 123 }}">barrouter-link>li>
            ul>
            <router-view class="view">router-view>
        div>
    `
}).$.mount('#app')

你可能感兴趣的:(前端框架)