Skip to content

Commit af75417

Browse files
authored
docs(zh): update (#3178)
1 parent ca68c6b commit af75417

13 files changed

+59
-11
lines changed

Diff for: docs/zh/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
对于 TypeScript 用户来说,`[email protected]+` 依赖 `[email protected]+`,反之亦然。
55
:::
66

7+
<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">观看 Vue School 的关于 Vue Router 的免费视频课程 (英文)</a></div>
8+
79
Vue Router 是 [Vue.js](http://cn.vuejs.org) 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:
810

911
- 嵌套的路由/视图表

Diff for: docs/zh/api/README.md

+9
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ sidebar: auto
166166

167167
配置当链接被精确匹配的时候应该激活的 class。注意默认值也是可以通过路由构造函数选项 `linkExactActiveClass` 进行全局配置的。
168168

169+
### aria-current-value
170+
171+
- 类型: `'page' | 'step' | 'location' | 'date' | 'time'`
172+
- 默认值: `"page"`
173+
174+
当链接根据精确匹配规则激活时配置的 `aria-current` 的值。这个值应该是 ARIA 规范中[允许的 aria-current 的值](https://www.w3.org/TR/wai-aria-1.2/#aria-current)。在绝大多数场景下,默认值 `page` 应该是最合适的。
175+
169176
## `<router-view>`
170177

171178
`<router-view>` 组件是一个 functional 组件,渲染路径匹配到的视图组件。`<router-view>` 渲染的组件还可以内嵌自己的 `<router-view>`,根据嵌套路径,渲染嵌套组件。
@@ -288,6 +295,8 @@ sidebar: auto
288295

289296
- 类型: `boolean`
290297

298+
- 默认值: `true`
299+
291300
当浏览器不支持 `history.pushState` 控制路由是否应该回退到 `hash` 模式。默认值为 `true`
292301

293302
在 IE9 中,设置为 `false` 会使得每个 `router-link` 导航都触发整页刷新。它可用于工作在 IE9 下的服务端渲染应用,因为一个 hash 模式的 URL 并不支持服务端渲染。

Diff for: docs/zh/guide/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
同时,所有的例子都将使用完整版的 Vue 以解析模板。更多细节请[移步这里](https://cn.vuejs.org/v2/guide/installation.html#运行时-编译器-vs-只包含运行时)
77
:::
88

9+
<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">观看 Vue School 的关于 Vue Router 的免费视频课程 (英文)</a></div>
10+
911
用 Vue.js + Vue Router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 Vue Router 添加进来,我们需要做的是,将组件 (components) 映射到路由 (routes),然后告诉 Vue Router 在哪里渲染它们。下面是个基本例子:
1012

1113
## HTML

Diff for: docs/zh/guide/advanced/lazy-loading.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 路由懒加载
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-lazy-load-routes-with-vue-router?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to increase performance by lazy loading routes on Vue School">观看 Vue School 的如何路由懒加载的免费视频课程 (英文)</a></div>
4+
35
当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。
46

57
结合 Vue 的[异步组件](https://cn.vuejs.org/v2/guide/components-dynamic-async.html#异步组件)和 Webpack 的[代码分割功能](https://doc.webpack-china.org/guides/code-splitting-async/#require-ensure-/),轻松实现路由组件的懒加载。

Diff for: docs/zh/guide/advanced/navigation-guards.md

+21-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
记住**参数或查询的改变并不会触发进入/离开的导航守卫**。你可以通过[观察 `$route` 对象](../essentials/dynamic-matching.md#响应路由参数的变化)来应对这些变化,或使用 `beforeRouteUpdate` 的组件内守卫。
1010

11+
<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-configure-an-authentication-middleware-route-guard-with-vue-router?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to create an authentication middleware with a global route guard on Vue School">观看 Vue School 的导航守卫如何工作的免费视频课程 (英文)</a></div>
12+
1113
## 全局前置守卫
1214

1315
你可以使用 `router.beforeEach` 注册一个全局前置守卫:
@@ -38,7 +40,24 @@ router.beforeEach((to, from, next) => {
3840

3941
- **`next(error)`**: (2.4.0+) 如果传入 `next` 的参数是一个 `Error` 实例,则导航会被终止且该错误会被传递给 [`router.onError()`](../../api/#router-onerror) 注册过的回调。
4042

41-
**确保要调用 `next` 方法,否则钩子就不会被 resolved。**
43+
**确保 `next` 函数在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错。**这里有一个在用户未能验证身份时重定向到 `/login` 的示例:
44+
45+
```js
46+
// BAD
47+
router.beforeEach((to, from, next) => {
48+
if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
49+
// 如果用户未能验证身份,则 `next` 会被调用两次
50+
next()
51+
})
52+
```
53+
54+
```js
55+
// GOOD
56+
router.beforeEach((to, from, next) => {
57+
if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
58+
else next()
59+
})
60+
```
4261

4362
## 全局解析守卫
4463

@@ -143,7 +162,7 @@ beforeRouteLeave (to, from, next) {
143162
## 完整的导航解析流程
144163

145164
1. 导航被触发。
146-
2. 在失活的组件里调用离开守卫
165+
2. 在失活的组件里调用 `beforeRouteLeave` 守卫
147166
3. 调用全局的 `beforeEach` 守卫。
148167
4. 在重用的组件里调用 `beforeRouteUpdate` 守卫 (2.2+)。
149168
5. 在路由配置里调用 `beforeEnter`

Diff for: docs/zh/guide/advanced/scroll-behavior.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 滚动行为
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-control-the-scroll-behavior-of-vue-router?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to control the scroll behavior on Vue School">观看 Vue School 的如何控制滚动行为的免费视频课程 (英文)</a></div>
4+
35
使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 `vue-router` 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。
46

57
**注意: 这个功能只在支持 `history.pushState` 的浏览器中可用。**

Diff for: docs/zh/guide/advanced/transitions.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 过渡动效
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-create-route-transitions-with-vue-router?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to create route transitions on Vue School">观看 Vue School 的如何创建路由过渡动效的免费视频课程 (英文)</a></div>
4+
35
`<router-view>` 是基本的动态组件,所以我们可以用 `<transition>` 组件给它添加一些过渡效果:
46

57
``` html

Diff for: docs/zh/guide/essentials/dynamic-matching.md

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# 动态路由匹配
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-dynamic-routes?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to match dynamic routes with Vue School">观看 Vue School 的如何匹配动态路由的免费视频课程 (英文)</a></div>
4+
35
我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 `User` 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 `vue-router` 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果:
46

5-
``` js
7+
```js
68
const User = {
79
template: '<div>User</div>'
810
}
@@ -20,7 +22,7 @@ const router = new VueRouter({
2022
一个“路径参数”使用冒号 `:` 标记。当匹配到一个路由时,参数值会被设置到
2123
`this.$route.params`,可以在每个组件内使用。于是,我们可以更新 `User` 的模板,输出当前用户的 ID:
2224

23-
``` js
25+
```js
2426
const User = {
2527
template: '<div>User {{ $route.params.id }}</div>'
2628
}
@@ -31,8 +33,8 @@ const User = {
3133
你可以在一个路由中设置多段“路径参数”,对应的值都会设置到 `$route.params` 中。例如:
3234

3335
| 模式 | 匹配路径 | $route.params |
34-
|---------|------|--------|
35-
| /user/:username | /user/evan | `{ username: 'evan' }` |
36+
| ----------------------------- | ------------------- | -------------------------------------- |
37+
| /user/:username | /user/evan | `{ username: 'evan' }` |
3638
| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` |
3739

3840
除了 `$route.params` 外,`$route` 对象还提供了其它有用的信息,例如,`$route.query` (如果 URL 中有查询参数)、`$route.hash` 等等。你可以查看 [API 文档](../../api/#路由对象) 的详细说明。
@@ -43,11 +45,11 @@ const User = {
4345

4446
复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch (监测变化) `$route` 对象:
4547

46-
``` js
48+
```js
4749
const User = {
4850
template: '...',
4951
watch: {
50-
'$route' (to, from) {
52+
$route(to, from) {
5153
// 对路由变化作出响应...
5254
}
5355
}
@@ -56,7 +58,7 @@ const User = {
5658

5759
或者使用 2.2 中引入的 `beforeRouteUpdate` [导航守卫](../advanced/navigation-guards.html)
5860

59-
``` js
61+
```js
6062
const User = {
6163
template: '...',
6264
beforeRouteUpdate (to, from, next) {
@@ -96,7 +98,7 @@ this.$route.params.pathMatch // '/non-existing'
9698

9799
## 高级匹配模式
98100

99-
`vue-router` 使用 [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) 作为路径匹配引擎,所以支持很多高级的匹配模式,例如:可选的动态路径参数、匹配零个或多个、一个或多个,甚至是自定义正则匹配。查看它的 [文档](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters) 学习高阶的路径匹配,还有 [这个例子 ](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) 展示 `vue-router` 怎么使用这类匹配。
101+
`vue-router` 使用 [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) 作为路径匹配引擎,所以支持很多高级的匹配模式,例如:可选的动态路径参数、匹配零个或多个、一个或多个,甚至是自定义正则匹配。查看它的[文档](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters)学习高阶的路径匹配,还有[这个例子 ](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js)展示 `vue-router` 怎么使用这类匹配。
100102

101103
## 匹配优先级
102104

Diff for: docs/zh/guide/essentials/history-mode.md

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ const router = new VueRouter({
1919

2020
## 后端配置例子
2121

22+
**注意**:下列示例假设你在根目录服务这个应用。如果想部署到一个子目录,你需要使用 [Vue CLI 的 `publicPath` 选项](https://cli.vuejs.org/zh/config/#publicpath) 和相关的 [router `base` property](https://router.vuejs.org/zh/api/#base)。你还需要把下列示例中的根目录调整成为子目录 (例如用 `RewriteBase /name-of-your-subfolder/` 替换掉 `RewriteBase /`)。
23+
2224
#### Apache
2325

2426
```apache

Diff for: docs/zh/guide/essentials/named-routes.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 命名路由
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-named-routes-and-params?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to work with named routes and params with Vue School">观看 Vue School 的如何使用命名路由及其参数的免费视频课程 (英文)</a></div>
4+
35
有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 `routes` 配置中给某个路由设置名称。
46

57
``` js

Diff for: docs/zh/guide/essentials/nested-routes.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 嵌套路由
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-nested-routes?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to work with nested routes with Vue School">观看 Vue School 的如何使用嵌套路由的免费视频课程 (英文)</a></div>
4+
35
实际生活中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如:
46

57
```

Diff for: docs/zh/guide/essentials/passing-props.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 路由组件传参
22

3+
<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-pass-vue-router-params-as-props-to-components?friend=vuejs" target="_blank" rel="sponsored noopener" title="Learn how to pass props to route components with Vue School">观看 Vue School 的如何向路由组件传递 prop 的免费视频课程 (英文)</a></div>
4+
35
在组件中使用 `$route` 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。
46

57
使用 `props` 将组件和路由解耦:

Diff for: docs/zh/guide/essentials/redirect-and-alias.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const router = new VueRouter({
3535
})
3636
```
3737

38-
注意[导航守卫](../advanced/navigation-guards.md)并没有应用在跳转路由上,而仅仅应用在其目标上。在下面这个例子中,为 `/a` 路由添加一个 `beforeEach` `beforeLeave` 守卫并不会有任何效果。
38+
注意[导航守卫](../advanced/navigation-guards.md)并没有应用在跳转路由上,而仅仅应用在其目标上。在下面这个例子中,为 `/a` 路由添加一个 `beforeEach` 守卫并不会有任何效果。
3939

4040
其它高级用法,请参考[例子](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js)
4141

0 commit comments

Comments
 (0)