1 中文文档地址: https://router.vuejs.org/zh-cn/essentials/nested-routes.html
2 <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
3
4 <p>
5 <router-link to="/user/1">Go to Foo</router-link>
6 <router-link to="/bar">Go to Bar</router-link>
7 </p>
8 <router-view></router-view>
9
10 const User = {
11 template: '<div>User {{ $route.params.id }}</div>'
12 }
13 const Bar= {
14 template: '<div>User</div>'
15 }
16
17 const router = new VueRouter({
18 routes: [
19 { path: '/user/:id', component: User },
20 { path: '/bar', component: Bar }
21 ]
22 })
23
24 var vue = new Vue({
25 router,
26 el:"#app"
27 })
28
29 二级路由:
30 const router = new VueRouter({
31 routes: [
32 {
33 path: '/user/:id',
34 component: User,
35 children: [
36 {
37 // 当 /user/:id 匹配成功,地址为空时跳转UserHome页面
38 // UserHome 会被渲染在 User 的 <router-view> 中
39 path: '',
40 component: UserHome
41 },
42 {
43 // 当 /user/:id/profile 匹配成功,
44 // UserProfile 会被渲染在 User 的 <router-view> 中
45 path: 'profile',
46 component: UserProfile
47 },
48 {
49 // 当 /user/:id/posts 匹配成功
50 // UserPosts 会被渲染在 User 的 <router-view> 中 ---> 需要注意
51 path: 'posts',
52 component: UserPosts
53 }
54 ]
55 }
56 ]
57 });
58 要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径
59
60 编程式导航:
61
62 router.push(location)
63 1.// 字符串
64 router.push('home')
65 2.// 对象
66 router.push({ path: 'home' })
67 3.// 命名的路由
68 router.push({ name: 'user', params: { userId: 123 }})
69 4.// 带查询参数,变成 /register?plan=private
70 router.push({ path: 'register', query: { plan: 'private' }})
71 当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)
72
73 router.replace(location)
74 跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录
75 声明式:
76 <router-link :to="..." replace>
77 编程式:
78 router.replace(...)
79
80 router.go(n)
81 这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)
82 1.// 在浏览器记录中前进一步,等同于 history.forward()
83 router.go(1)
84 2.// 后退一步记录,等同于 history.back()
85 router.go(-1)
86 3.// 前进 3 步记录
87 router.go(3)
88 4.// 如果 history 记录不够用,那就默默地失败呗
89 router.go(-100)
90 router.go(100)
91
92 命名路由
93 有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称
94 const router = new VueRouter({
95 routes: [
96 {
97 path: '/user/:userId',
98 name: 'user',
99 component: User
100 }
101 ]
102 })
103 要链接到一个命名路由,可以给 router-link 的 to 属性传一个对象
104 <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
105 这跟代码调用 router.push() 是一回事
106 router.push({ name: 'user', params: { userId: 123 }})
107 这两种方式都会把路由导航到 /user/123 路径
108 例子:
109 import Vue from 'vue'
110 import VueRouter from 'vue-router'
111
112 Vue.use(VueRouter)
113
114 const Home = { template: '<div>This is Home</div>' }
115 const Foo = { template: '<div>This is Foo</div>' }
116 const Bar = { template: '<div>This is Bar {{ $route.params.id }}</div>' }
117
118 const router = new VueRouter({
119 mode: 'history',
120 base: __dirname,
121 routes: [
122 { path: '/', name: 'home', component: Home },
123 { path: '/foo', name: 'foo', component: Foo },
124 { path: '/bar/:id', name: 'bar', component: Bar }
125 ]
126 })
127
128 new Vue({
129 router,
130 template: `
131 <div id="app">
132 <h1>Named Routes</h1>
133 <p>Current route name: {{ $route.name }}</p>
134 <ul>
135 <li><router-link :to="{ name: 'home' }">home</router-link></li>
136 <li><router-link :to="{ name: 'foo' }">foo</router-link></li>
137 <li><router-link :to="{ name: 'bar', params: { id: 123 }}">bar</router-link></li>
138 </ul>
139 <router-view class="view"></router-view>
140 </div> `
141 }).$mount('#app')
142
143 命名视图:
144 有时候想同时(同级)展示多个视图,而不是嵌套展示,例如创建一个布局,有 sidebar(侧导航) 和 main(主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默认为 default
145 html:
146 <script src="https://unpkg.com/vue/dist/vue.js"></script>
147 <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
148
149 <div id="app">
150 <h1>Named Views</h1>
151 <ul>
152 <li>
153 <router-link to="/">/</router-link>
154 </li>
155 <li>
156 <router-link to="/other">/other</router-link>
157 </li>
158 </ul>
159 <router-view class="view one"></router-view>
160 <router-view class="view two" name="a"></router-view>
161 <router-view class="view three" name="b"></router-view>
162 </div>
163
164 js:
165 const Foo = { template: '<div>foo</div>' }
166 const Bar = { template: '<div>bar</div>' }
167 const Baz = { template: '<div>baz</div>' }
168
169 const router = new VueRouter({
170 mode: 'history',
171 routes: [
172 {
173 path: '/',
174 components: {
175 default: Foo,
176 a: Bar,
177 b: Baz
178 }
179 },
180 {
181 path: '/other',
182 components: {
183 default: Baz,
184 a: Bar,
185 b:Foo
186 }
187 }
188 ]
189 })
190
191 new Vue({
192 router,
193 el: '#app'
194 })