Skip to content

Commit be4f255

Browse files
committed
Merge remote-tracking branch 'upstream/2.0-cn' into 2.0-cn
2 parents f5c8ff0 + ddd750e commit be4f255

File tree

8 files changed

+150
-156
lines changed

8 files changed

+150
-156
lines changed

src/api/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ type: api
11841184

11851185
- **示例:**
11861186

1187-
迫使Vue实例重修渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
1187+
迫使Vue实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
11881188

11891189
<h3 id="vm-nextTick">vm.$nextTick( callback )</h3>
11901190

src/guide/comparison.md

Lines changed: 98 additions & 103 deletions
Large diffs are not rendered by default.

src/guide/components.md

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Vue.component('my-component', {
2929
})
3030
```
3131

32-
<p class="tip">对于自定义标签名字, Vue.js 不强制要求遵循 W3C 规则(小写,并且包含一个短杠),尽管遵循这个规则比较好。</p>
32+
<p class="tip">对于自定义标签名,Vue.js 不强制要求遵循 [W3C规则](https://www.w3.org/TR/custom-elements/#concepts) (小写,并且包含一个短杠),尽管遵循这个规则比较好。</p>
3333

3434
组件在注册之后,便可以在父实例的模块中以自定义元素 `<my-component></my-component>` 的形式使用。要确保在初始化根实例 **之前** 注册了组件:
3535

@@ -83,7 +83,7 @@ var Child = {
8383
new Vue({
8484
// ...
8585
components: {
86-
// <my-component> will only be available in parent's template
86+
// <my-component> 将只在父模板可用
8787
'my-component': Child
8888
}
8989
})
@@ -228,16 +228,16 @@ new Vue({
228228

229229
### 使用Props传递数据
230230

231-
**组件实例的作用域是孤立的**。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。
231+
组件实例的作用域是**孤立的**。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。
232232

233-
prop 是父组件用来传递消息的一个自定义属性。子组件需要显式地用 [`props` 选项](/api/#props) 声明 props
233+
prop 是父组件用来传递数据的一个自定义属性。子组件需要显式地用 [`props` 选项](/api/#props) 声明 “prop”
234234

235235
``` js
236236
Vue.component('child', {
237237
// 声明 props
238238
props: ['message'],
239-
 // 就像 data 一样 prop 也可以用在模板内
240-
// and is also made available in the vm as this.message
239+
// 就像 data 一样, prop 可以用在模板内
240+
// 同样也可以在 vm 实例中像 “this.message” 这样使用
241241
template: '<span>{{ message }}</span>'
242242
})
243243
```
@@ -333,7 +333,7 @@ new Vue({
333333
初学者常犯的一个错误是使用字面量语法传递数值:
334334

335335
``` html
336-
<!-- 传递一个字符串"1" -->
336+
<!-- 传递了一个字符串"1" -->
337337
<comp some-prop="1"></comp>
338338
```
339339

@@ -346,9 +346,9 @@ new Vue({
346346

347347
### 单向数据流
348348

349-
prop 是单向绑定:当父组件的属性变化时,将传导给子组件,但是反过来不会。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解
349+
prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解.
350350

351-
另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop 。如果你这么做了, Vue 会在控制台给出警告。
351+
另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你**不应该**在子组件内部改变 prop 。如果你这么做了,Vue 会在控制台给出警告。
352352

353353
通常有两种改变 prop 的情况:
354354

@@ -362,18 +362,18 @@ prop 是单向绑定:当父组件的属性变化时,将传导给子组件,
362362

363363
2. 定义一个基于 prop 值的计算属性。
364364

365-
<p class="tip">注意在 JavaScript 中对象和数组是通过引用传递的,如果 prop 是一个对象或数组,在子组件内部改变它**会**影响父组件的状态。</p>
365+
<p class="tip">注意在 JavaScript 中对象和数组是通过引用传递的,如果 prop 是一个对象或数组,在子组件内部改变它**会影响**父组件的状态。</p>
366366

367367
### Prop 验证
368368

369-
组件可以为 props 指定验证要求。如果未指定要求, Vue 会发出警告。当组件给其他人使用时这很有用。
369+
组件可以为 props 指定验证要求。如果未指定验证要求,Vue会发出警告。当组件给其他人使用时这很有用。
370370

371371
prop 是一个对象而不是字符串数组时,它包含验证要求:
372372

373373
``` js
374374
Vue.component('example', {
375375
props: {
376-
// 基础类型检测 (`null` 意思是任何类型都可以)
376+
// 基础类型检测 `null` 意思是任何类型都可以
377377
propA: Number,
378378
// 多种类型
379379
propB: [String, Number],
@@ -428,7 +428,7 @@ Vue.component('example', {
428428
- 使用 `$on(eventName)` 监听事件
429429
- 使用 `$emit(eventName)` 触发事件
430430

431-
另外,父组件可以在模版中监听子组件直接使用 `v-on` 发出的事件
431+
另外,父组件可以在使用子组件的地方直接用 `v-on` 来监听子组件触发的事件
432432

433433
下面是一个例子:
434434

@@ -504,7 +504,7 @@ new Vue({
504504
</script>
505505
{% endraw %}
506506

507-
在本例中,子组件仍然和它外部完全解耦合了。它所做的只是将父组件可能会关心的发生在它内部的事情告知给父组件了
507+
在本例中,子组件已经和它外部完全解耦了。它所做的只是触发一个父组件关心的内部事件
508508

509509
#### 给组件绑定原生事件
510510

@@ -516,7 +516,7 @@ new Vue({
516516

517517
### 使用自定义事件的表单输入组件
518518

519-
也可以用 `v-model` 来创建自定义表单输入。记住:
519+
自定义事件也可以用来创建自定义的表单输入组件,使用 `v-model` 来进行数据双向绑定。记住,表单控件进行数据绑定时的语法
520520

521521
``` html
522522
<input v-model="something">
@@ -528,7 +528,7 @@ new Vue({
528528
<input v-bind:value="something" v-on:input="something = $event.target.value">
529529
```
530530

531-
在组件中使用时,它相当于下面的简写:
531+
所以在组件中使用时, 它相当于下面的简写:
532532

533533
``` html
534534
<input v-bind:value="something" v-on:input="something = arguments[0]">
@@ -617,7 +617,7 @@ new Vue({
617617
</script>
618618
{% endraw %}
619619

620-
这个接口不仅仅可以用来联系组件内部的表单输入,也很容易集成你自己写的输入类型。想象一下:
620+
这个接口不仅仅可以用来连接组件内部的表单输入,也很容易集成你自己创造的输入类型。想象一下:
621621

622622
``` html
623623
<voice-recognizer v-model="question"></voice-recognizer>
@@ -633,11 +633,11 @@ new Vue({
633633
var bus = new Vue()
634634
```
635635
``` js
636-
// 组件 A 的方法
636+
// 触发组件 A 中的事件
637637
bus.$emit('id-selected', 1)
638638
```
639639
``` js
640-
// 组件 B 创建的钩子
640+
// 在组件 B 创建的钩子中监听事件
641641
bus.$on('id-selected', function (id) {
642642
// ...
643643
})
@@ -705,7 +705,7 @@ Vue.component('child-component', {
705705

706706
### 单个 Slot
707707

708-
父组件的内容将被**抛弃**,除非子组件模板包含 `<slot>` 。如果子组件模板只有一个没有特性的 slot ,父组件的整个内容将插到 slot 所在的地方并替换它
708+
父组件的内容将被**抛弃**,除非子组件模板包含 `<slot>` 。如果子组件模板只有一个没有特性的 slot,父组件整个内容片段 将插到 slot 所在的 DOM 位置并替换掉 slot 标签
709709

710710
`<slot>` 标签的内容视为**回退内容**。回退内容在子组件的作用域内编译,当宿主元素为空并且没有内容供插入时显示这个回退内容。
711711

@@ -938,7 +938,7 @@ Vue.component(
938938

939939
### 组件命名约定
940940

941-
当定义组件时(或者 props ),可以使用 kebab-case , camelCase 或 TitleCase 。 Vue 不关心这个。
941+
当注册组件时(或者 props ,可以使用 kebab-case ,camelCase 或 TitleCase 。Vue 不关心这个。
942942

943943
``` js
944944
// 在组件定义中
@@ -950,7 +950,7 @@ components: {
950950
}
951951
```
952952

953-
在 HTML 模版中,请使用 kebab-case 形式:
953+
在 HTML 模版中,请使用 kebab-case形式:
954954

955955
``` html
956956
<!-- 在HTML模版中始终使用 kebab-case -->
@@ -962,19 +962,19 @@ components: {
962962
当使用字符串模式时,可以不受 HTML 的 case-insensitive 限制。这意味即使是在模版中,引用、组件和 prop 可以使用 camelCase 、 PascalCase 或者 kebab-case:
963963

964964
``` html
965-
<!-- 在字符串模版中用你想用! -->
965+
<!-- 在字符串模版中可以用任何你喜欢的方式! -->
966966
<my-component></my-component>
967967
<myComponent></myComponent>
968968
<MyComponent></MyComponent>
969969
```
970970

971-
如果组件未经 `slot` 元素传递内容,你甚至可以在组件名后使用 `/` 使其自闭和:
971+
如果组件未经 `slot` 元素传递内容你甚至可以在组件名后使用 `/` 使其自闭和:
972972

973973
``` html
974974
<my-component/>
975975
```
976976

977-
当然,这只在字符串模版中有效。因为自闭和的自定义元素是无效的 HTML ,浏览器原生的解析器也无法识别它。
977+
当然,这只在字符串模版中有效。因为自闭的自定义元素是无效的 HTML ,浏览器原生的解析器也无法识别它。
978978

979979
### 递归组件
980980

@@ -985,7 +985,7 @@ name: 'stack-overflow',
985985
template: '<div><stack-overflow></stack-overflow></div>'
986986
```
987987

988-
上面组件会导致一个错误 “max stack size exceeded” ,所以要确保递归调用有终止条件 (也就是使用 `v-if` )。当使用 `Vue.component()` 全局注册一个组件时,组件 ID 自动设置为组件的 `name` 选项。
988+
上面组件会导致一个错误 “max stack size exceeded” ,所以要确保递归调用有终止条件 (比如递归调用时使用 `v-if` 并让他最终返回 false )。当使用 `Vue.component()` 全局注册一个组件时,全局的组件 ID 自动设置为该组件的 `name` 选项。
989989

990990
### 内联模版
991991

@@ -1002,7 +1002,7 @@ template: '<div><stack-overflow></stack-overflow></div>'
10021002

10031003
### X-Templates
10041004

1005-
另一种定义模版的方式是在 javascript 标签里使用 `text/x-template` 类型并且指定一个id。例如:
1005+
另一种定义模版的方式是在 JavaScript 标签里使用 `text/x-template` 类型, 并且指定一个id。例如:
10061006

10071007
``` html
10081008
<script type="text/x-template" id="hello-world-template">
@@ -1016,11 +1016,11 @@ Vue.component('hello-world', {
10161016
})
10171017
```
10181018

1019-
这在有很多模版或者小的应用中有用,否则应该避免使用,因为它将模版和组件的其他定义隔离了。
1019+
这在有很多模版或者小的应用中有用,否则应该避免使用因为它将模版和组件的其他定义隔离了。
10201020

10211021
### Cheap Static Components with `v-once`
10221022

1023-
尽管在 Vue 中渲染 HTML 很快,不过当组件中包含**大量**静态内容时, 可以考虑使用 `v-once` 将渲染结果缓存起来就像这样:
1023+
尽管在 Vue 中渲染 HTML 很快,不过当组件中包含**大量**静态内容时, 可以考虑使用 `v-once` 将渲染结果缓存起来, 就像这样:
10241024

10251025
``` js
10261026
Vue.component('terms-of-service', {

src/guide/computed.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ var watchExampleVM = new Vue({
226226
methods: {
227227
  // _.debounce 是一个通过 lodash 限制操作频率的函数。
228228
  // 在这个例子中,我们希望限制访问yesno.wtf/api的频率
229-
  // 一直等待直到用户发出ajax请求之前
229+
  // ajax请求直到用户输入完毕才会发出
230230
  // 学习更多关于 _.debounce function (and its cousin
231231
// _.throttle), 参考: https://lodash.com/docs#debounce
232232
getAnswer: _.debounce(

src/guide/custom-directive.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ order: 16
66

77
## 简介
88

9-
除了默认设置的核心指令(`v-model``v-show`),Vue也允许注册自定义指令。注意,在vue2.0里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯DOM元素进行底层操作,这时候就会用到自定义指令。下面这个例子聚焦一个input元素,像这样:
9+
除了默认设置的核心指令( `v-model``v-show` ),Vue 也允许注册自定义指令。注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令。下面这个例子将聚焦一个 input 元素,像这样:
1010

1111
{% raw %}
1212
<div id="simplest-directive-example" class="demo">
@@ -24,20 +24,20 @@ new Vue({
2424
</script>
2525
{% endraw %}
2626

27-
页面加载时,元素将获得焦点。事实上,你访问后还没点击任何内容,input就获得了焦点。现在让我们完善这个指令:
27+
当页面加载时,元素将获得焦点。事实上,你访问后还没点击任何内容,input 就获得了焦点。现在让我们完善这个指令:
2828

2929
``` js
3030
// 注册一个全局自定义指令 v-focus
3131
Vue.directive('focus', {
32-
// 当绑定元素插入到DOM中
32+
// 当绑定元素插入到 DOM 中
3333
inserted: function (el) {
3434
// 聚焦元素
3535
el.focus()
3636
}
3737
})
3838
```
3939

40-
也可以注册局部指令,组件中接受一个 `directives`的选项:
40+
也可以注册局部指令,组件中接受一个 `directives` 的选项:
4141

4242
``` js
4343
directives: {
@@ -48,7 +48,7 @@ directives: {
4848
}
4949
```
5050

51-
然后你可以在模板中任何元素上使用新的`v-focus`属性:
51+
然后你可以在模板中任何元素上使用新的 `v-focus` 属性:
5252

5353
``` html
5454
<input v-focus>
@@ -61,31 +61,31 @@ directives: {
6161
- `bind`: 只调用一次, 指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
6262

6363
- `inserted`: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
64-
64+
6565
- `update`: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。
6666

6767
- `componentUpdated`: 被绑定元素所在模板完成一次更新周期时调用。
6868

6969
- `unbind`: 只调用一次, 指令与元素解绑时调用。
7070

71-
接下来我们来看一下钩子函数的参数 (包括 `el` `binding` `vnode` `oldVnode`) 。
71+
接下来我们来看一下钩子函数的参数 (包括 `el``binding``vnode``oldVnode`) 。
7272

7373
## 钩子函数参数
7474

7575
钩子函数被赋予了以下参数:
7676

77-
- **el**: 指令所绑定的元素,可以用来直接操作 dom
77+
- **el**: 指令所绑定的元素,可以用来直接操作 DOM
7878
- **binding**: 一个对象,包含以下属性:
7979
- **name**: 指令名,不包括 `v-` 前缀。
8080
- **value**: 指令的绑定值, 例如: `v-my-directive="1 + 1"`, value 的值是 `2`
8181
- **oldValue**: 指令绑定的前一个值, 仅在 `update``componentUpdated` 钩子中可用。无论值是否改变都可用。
8282
- **expression**: 绑定值的字符串形式。 例如 `v-my-directive="1 + 1"` , expression 的值是 `"1 + 1"`
8383
- **arg**: 传给指令的参数。例如 `v-my-directive:foo`, arg 的值是 `"foo"`
84-
- **modifiers**: 一个包含编辑器的对象。 例如: `v-my-directive.foo.bar`, 编辑器对象 modifiers的值是 `{ foo: true, bar: true }`
85-
- **vnode**: Vue 编译生成的虚拟节点, 参考 [VNode API](/api/#VNode-Interface) 详情
84+
- **modifiers**: 一个包含修饰符的对象。 例如: `v-my-directive.foo.bar`, 修饰符对象 modifiers 的值是 `{ foo: true, bar: true }`
85+
- **vnode**: Vue 编译生成的虚拟节点, 查阅 [VNode API](/api/#VNode-Interface) 了解更多详情
8686
- **oldVnode**: 上一个虚拟节点, 仅在 `update``componentUpdated` 钩子中可用。
8787

88-
<p class="tip">除了 `el` 之外, 其它参数都应该是只读的,尽量不要修改他们。如果需要在钩子之间共享数据,建议通过元素的 [dataset] 来进行。(https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset).</p>
88+
<p class="tip">除了 `el` 之外, 其它参数都应该是只读的,尽量不要修改他们。如果需要在钩子之间共享数据,建议通过元素的 [dataset](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset) 来进行。</p>
8989

9090
一个使用了这些参数的自定义钩子样例:
9191

@@ -141,16 +141,16 @@ new Vue({
141141

142142
## 函数简写
143143

144-
大多数情况下,只需要在 `bind``update` 钩子中做重复动作,而不关心其它钩子函数。可以这样写:
144+
大多数情况下,我们可能想在 `bind``update` 钩子上做重复动作,并且不想关心其它的钩子函数。可以这样写:
145145

146146
``` js
147147
Vue.directive('color-swatch', function (el, binding) {
148148
el.style.backgroundColor = binding.value
149149
})
150150
```
151-
## 对象常量
151+
## 对象字面量
152152

153-
如果自定义指令需要复杂的值,也可以传递 javascript 对象。要知道,指令函数能够接受所有类型的 javascript 常量
153+
如果指令需要多个值,可以传入一个 JavaScript 对象字面量。记住,指令函数能够接受所有合法类型的 Javascript 表达式
154154

155155
``` html
156156
<div v-demo="{ color: 'white', text: 'hello!' }"></div>
@@ -167,4 +167,4 @@ Vue.directive('demo', function (el, binding) {
167167

168168
> 原文:http://vuejs.org/guide/custom-directive.html
169169
170-
***
170+
***

src/guide/index.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ order: 2
66

77
## Vue.js 是什么
88

9-
Vue.js(读音 /vjuː/, 类似于 **view**) 是一套构建用户界面的 **先进框架**。与其他单层框架( monolithic frameworks)不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用[单文件组件](single-file-components.html)[Vue生态系统支持的库](//github.com/vuejs/awesome-vue#libraries--plugins)开发的复杂单页应用。
9+
Vue.js(读音 /vjuː/, 类似于 **view**) 是一套构建用户界面的 **先进框架**。与其他单层框架( monolithic frameworks)不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用[单文件组件](single-file-components.html)[Vue生态系统支持的库](//github.com/vuejs/awesome-vue#libraries--plugins)开发的复杂单页应用。
1010

1111
Vue.js 的目标是通过尽可能简单的 API 实现**响应的数据绑定****组合的视图组件**
1212

@@ -283,7 +283,8 @@ Vue.component('todo', {
283283
<todo v-for="todo in todos" v-bind:todo="todo"></todo>
284284
</ol>
285285
</div>
286-
```
286+
```
287+
287288
``` js
288289
var app7 = new Vue({
289290
el: '#app-7',
@@ -316,7 +317,7 @@ var app7 = new Vue({
316317
</script>
317318
{% endraw %}
318319

319-
这只是一个人为的例子,但是我们已经将我们的应用分割成了两小的单元,子元素通过 `props` 接口实现了与父亲元素很好的解耦。我们现在可以在不影响到父应用的基础上,进一步为我们的 `todo` 组件改进更多复杂的模板和逻辑。
320+
这只是一个人为的例子,但是我们已经将我们的应用分割成了两个更小的单元,子元素通过 `props` 接口实现了与父亲元素很好的解耦。我们现在可以在不影响到父应用的基础上,进一步为我们的 `todo` 组件改进更多复杂的模板和逻辑。
320321

321322
在一个大型应用中,为了使得开发过程可控,有必要将应用整体分割成一个个的组件。在[后面的教程](/guide/components.html)中我们将详述组件,不过这里有一个(假想)的例子,看看使用了组件的应用模板是什么样的:
322323

src/guide/migration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,7 @@ vm.$el.remove()
13841384
{% raw %}
13851385
<div class="upgrade-path">
13861386
<h4>升级方式</h4>
1387-
<p>运行 <a href="https://github.com/vuejs/vue-migration-helper">migration helper</a>找到<code>vm.$remove</code>.。如有遗漏,请参考<strong>控制台错误信息</strong>。</p>
1387+
<p>运行 <a href="https://github.com/vuejs/vue-migration-helper">migration helper</a>找到<code>vm.$remove</code>。如有遗漏,请参考<strong>控制台错误信息</strong>。</p>
13881388
</div>
13891389
{% endraw %}
13901390

0 commit comments

Comments
 (0)