@@ -29,7 +29,7 @@ Vue.component('my-component', {
29
29
})
30
30
```
31
31
32
- <p class =" tip " >对于自定义标签名字, Vue.js 不强制要求遵循 W3C 规则 (小写,并且包含一个短杠),尽管遵循这个规则比较好。</p >
32
+ <p class =" tip " >对于自定义标签名, Vue.js 不强制要求遵循 [W3C规则](https://www.w3.org/TR/custom-elements/#concepts) (小写,并且包含一个短杠),尽管遵循这个规则比较好。</p >
33
33
34
34
组件在注册之后,便可以在父实例的模块中以自定义元素 ` <my-component></my-component> ` 的形式使用。要确保在初始化根实例 ** 之前** 注册了组件:
35
35
@@ -83,7 +83,7 @@ var Child = {
83
83
new Vue ({
84
84
// ...
85
85
components: {
86
- // <my-component> will only be available in parent's template
86
+ // <my-component> 将只在父模板可用
87
87
' my-component' : Child
88
88
}
89
89
})
@@ -228,16 +228,16 @@ new Vue({
228
228
229
229
### 使用Props传递数据
230
230
231
- ** 组件实例的作用域是孤立的 ** 。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。
231
+ 组件实例的作用域是 ** 孤立的 ** 。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。
232
232
233
- prop 是父组件用来传递消息的一个自定义属性 。子组件需要显式地用 [ ` props ` 选项] ( /api/#props ) 声明 props :
233
+ prop 是父组件用来传递数据的一个自定义属性 。子组件需要显式地用 [ ` props ` 选项] ( /api/#props ) 声明 “prop” :
234
234
235
235
``` js
236
236
Vue .component (' child' , {
237
237
// 声明 props
238
238
props: [' message' ],
239
- // 就像 data 一样, prop 也可以用在模板内
240
- // and is also made available in the vm as this.message
239
+ // 就像 data 一样, prop 可以用在模板内
240
+ // 同样也可以在 vm 实例中像 “ this.message” 这样使用
241
241
template: ' <span>{{ message }}</span>'
242
242
})
243
243
```
@@ -333,7 +333,7 @@ new Vue({
333
333
初学者常犯的一个错误是使用字面量语法传递数值:
334
334
335
335
``` html
336
- <!-- 传递一个字符串 "1" -->
336
+ <!-- 传递了一个字符串 "1" -->
337
337
<comp some-prop =" 1" ></comp >
338
338
```
339
339
@@ -346,9 +346,9 @@ new Vue({
346
346
347
347
### 单向数据流
348
348
349
- prop 是单向绑定 :当父组件的属性变化时,将传导给子组件,但是反过来不会 。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。
349
+ prop 是单向绑定的 :当父组件的属性变化时,将传导给子组件,但是不会反过来 。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解.
350
350
351
- 另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop 。如果你这么做了, Vue 会在控制台给出警告。
351
+ 另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你 ** 不应该 ** 在子组件内部改变 prop 。如果你这么做了,Vue 会在控制台给出警告。
352
352
353
353
通常有两种改变 prop 的情况:
354
354
@@ -362,18 +362,18 @@ prop 是单向绑定:当父组件的属性变化时,将传导给子组件,
362
362
363
363
2 . 定义一个基于 prop 值的计算属性。
364
364
365
- <p class =" tip " >注意在 JavaScript 中对象和数组是通过引用传递的,如果 prop 是一个对象或数组,在子组件内部改变它**会**影响父组件的状态 。</p >
365
+ <p class =" tip " >注意在 JavaScript 中对象和数组是通过引用传递的,如果 prop 是一个对象或数组,在子组件内部改变它**会影响**父组件的状态 。</p >
366
366
367
367
### Prop 验证
368
368
369
- 组件可以为 props 指定验证要求。如果未指定要求, Vue 会发出警告 。当组件给其他人使用时这很有用。
369
+ 组件可以为 props 指定验证要求。如果未指定验证要求,Vue会发出警告 。当组件给其他人使用时这很有用。
370
370
371
371
prop 是一个对象而不是字符串数组时,它包含验证要求:
372
372
373
373
``` js
374
374
Vue .component (' example' , {
375
375
props: {
376
- // 基础类型检测 ( `null` 意思是任何类型都可以)
376
+ // 基础类型检测 ( `null` 意思是任何类型都可以)
377
377
propA: Number ,
378
378
// 多种类型
379
379
propB: [String , Number ],
@@ -428,7 +428,7 @@ Vue.component('example', {
428
428
- 使用 ` $on(eventName) ` 监听事件
429
429
- 使用 ` $emit(eventName) ` 触发事件
430
430
431
- 另外,父组件可以在模版中监听子组件直接使用 ` v-on ` 发出的事件 。
431
+ 另外,父组件可以在使用子组件的地方直接用 ` v-on ` 来监听子组件触发的事件 。
432
432
433
433
下面是一个例子:
434
434
@@ -504,7 +504,7 @@ new Vue({
504
504
</script >
505
505
{% endraw %}
506
506
507
- 在本例中,子组件仍然和它外部完全解耦合了。它所做的只是将父组件可能会关心的发生在它内部的事情告知给父组件了 。
507
+ 在本例中,子组件已经和它外部完全解耦了。它所做的只是触发一个父组件关心的内部事件 。
508
508
509
509
#### 给组件绑定原生事件
510
510
@@ -516,7 +516,7 @@ new Vue({
516
516
517
517
### 使用自定义事件的表单输入组件
518
518
519
- 也可以用 ` v-model ` 来创建自定义表单输入 。记住:
519
+ 自定义事件也可以用来创建自定义的表单输入组件,使用 ` v-model ` 来进行数据双向绑定 。记住,表单控件进行数据绑定时的语法 :
520
520
521
521
``` html
522
522
<input v-model =" something" >
@@ -528,7 +528,7 @@ new Vue({
528
528
<input v-bind:value =" something" v-on:input =" something = $event.target.value" >
529
529
```
530
530
531
- 在组件中使用时, 它相当于下面的简写:
531
+ 所以在组件中使用时, 它相当于下面的简写:
532
532
533
533
``` html
534
534
<input v-bind:value =" something" v-on:input =" something = arguments[0]" >
@@ -617,7 +617,7 @@ new Vue({
617
617
</script >
618
618
{% endraw %}
619
619
620
- 这个接口不仅仅可以用来联系组件内部的表单输入,也很容易集成你自己写的输入类型 。想象一下:
620
+ 这个接口不仅仅可以用来连接组件内部的表单输入,也很容易集成你自己创造的输入类型 。想象一下:
621
621
622
622
``` html
623
623
<voice-recognizer v-model =" question" ></voice-recognizer >
@@ -633,11 +633,11 @@ new Vue({
633
633
var bus = new Vue ()
634
634
```
635
635
``` js
636
- // 组件 A 的方法
636
+ // 触发组件 A 中的事件
637
637
bus .$emit (' id-selected' , 1 )
638
638
```
639
639
``` js
640
- // 组件 B 创建的钩子
640
+ // 在组件 B 创建的钩子中监听事件
641
641
bus .$on (' id-selected' , function (id ) {
642
642
// ...
643
643
})
@@ -705,7 +705,7 @@ Vue.component('child-component', {
705
705
706
706
### 单个 Slot
707
707
708
- 父组件的内容将被** 抛弃** ,除非子组件模板包含 ` <slot> ` 。如果子组件模板只有一个没有特性的 slot ,父组件的整个内容将插到 slot 所在的地方并替换它 。
708
+ 父组件的内容将被** 抛弃** ,除非子组件模板包含 ` <slot> ` 。如果子组件模板只有一个没有特性的 slot,父组件整个内容片段 将插到 slot 所在的 DOM 位置并替换掉 slot 标签 。
709
709
710
710
` <slot> ` 标签的内容视为** 回退内容** 。回退内容在子组件的作用域内编译,当宿主元素为空并且没有内容供插入时显示这个回退内容。
711
711
@@ -938,7 +938,7 @@ Vue.component(
938
938
939
939
### 组件命名约定
940
940
941
- 当定义组件时( 或者 props ) ,可以使用 kebab-case , camelCase 或 TitleCase 。 Vue 不关心这个。
941
+ 当注册组件时( 或者 props ) ,可以使用 kebab-case ,camelCase , 或 TitleCase 。Vue 不关心这个。
942
942
943
943
``` js
944
944
// 在组件定义中
@@ -950,7 +950,7 @@ components: {
950
950
}
951
951
```
952
952
953
- 在 HTML 模版中,请使用 kebab-case 形式:
953
+ 在 HTML 模版中,请使用 kebab-case形式:
954
954
955
955
``` html
956
956
<!-- 在HTML模版中始终使用 kebab-case -->
@@ -962,19 +962,19 @@ components: {
962
962
当使用字符串模式时,可以不受 HTML 的 case-insensitive 限制。这意味即使是在模版中,引用、组件和 prop 可以使用 camelCase 、 PascalCase 或者 kebab-case:
963
963
964
964
``` html
965
- <!-- 在字符串模版中用你想用 ! -->
965
+ <!-- 在字符串模版中可以用任何你喜欢的方式 ! -->
966
966
<my-component ></my-component >
967
967
<myComponent ></myComponent >
968
968
<MyComponent ></MyComponent >
969
969
```
970
970
971
- 如果组件未经 ` slot ` 元素传递内容, 你甚至可以在组件名后使用 ` / ` 使其自闭和:
971
+ 如果组件未经 ` slot ` 元素传递内容, 你甚至可以在组件名后使用 ` / ` 使其自闭和:
972
972
973
973
``` html
974
974
<my-component />
975
975
```
976
976
977
- 当然,这只在字符串模版中有效。因为自闭和的自定义元素是无效的 HTML ,浏览器原生的解析器也无法识别它。
977
+ 当然,这只在字符串模版中有效。因为自闭的自定义元素是无效的 HTML ,浏览器原生的解析器也无法识别它。
978
978
979
979
### 递归组件
980
980
@@ -985,7 +985,7 @@ name: 'stack-overflow',
985
985
template: ' <div><stack-overflow></stack-overflow></div>'
986
986
```
987
987
988
- 上面组件会导致一个错误 “max stack size exceeded” ,所以要确保递归调用有终止条件 (也就是使用 ` v-if ` )。当使用 ` Vue.component() ` 全局注册一个组件时,组件 ID 自动设置为组件的 ` name ` 选项。
988
+ 上面组件会导致一个错误 “max stack size exceeded” ,所以要确保递归调用有终止条件 (比如递归调用时使用 ` v-if ` 并让他最终返回 false )。当使用 ` Vue.component() ` 全局注册一个组件时,全局的组件 ID 自动设置为该组件的 ` name ` 选项。
989
989
990
990
### 内联模版
991
991
@@ -1002,7 +1002,7 @@ template: '<div><stack-overflow></stack-overflow></div>'
1002
1002
1003
1003
### X-Templates
1004
1004
1005
- 另一种定义模版的方式是在 javascript 标签里使用 ` text/x-template ` 类型, 并且指定一个id。例如:
1005
+ 另一种定义模版的方式是在 JavaScript 标签里使用 ` text/x-template ` 类型, 并且指定一个id。例如:
1006
1006
1007
1007
``` html
1008
1008
<script type =" text/x-template" id =" hello-world-template" >
@@ -1016,11 +1016,11 @@ Vue.component('hello-world', {
1016
1016
})
1017
1017
```
1018
1018
1019
- 这在有很多模版或者小的应用中有用,否则应该避免使用, 因为它将模版和组件的其他定义隔离了。
1019
+ 这在有很多模版或者小的应用中有用,否则应该避免使用, 因为它将模版和组件的其他定义隔离了。
1020
1020
1021
1021
### Cheap Static Components with ` v-once `
1022
1022
1023
- 尽管在 Vue 中渲染 HTML 很快,不过当组件中包含** 大量** 静态内容时, 可以考虑使用 ` v-once ` 将渲染结果缓存起来, 就像这样:
1023
+ 尽管在 Vue 中渲染 HTML 很快,不过当组件中包含** 大量** 静态内容时, 可以考虑使用 ` v-once ` 将渲染结果缓存起来, 就像这样:
1024
1024
1025
1025
``` js
1026
1026
Vue .component (' terms-of-service' , {
0 commit comments