1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
 v-bind:href 缩写
:href
v-on:click 缩写
@click

class指令
v-bind:class=""
对象语法
v-bind:class="json"
json = {'classA': true, 'classB':false }
v-bind:class="{ 'classA': isA, 'classB':isB }"
data: {
isA: true,
isB: false
}
数组语法
v-bind:class="[ classA, classB ]"
data: {
classA: 'class-a',
classB: 'class-b'
}
v-bind:class="[classA, isB ? classB : '']"
isB: true

v-bind:style=""
对象语法
<divv-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
数组语法
<divv-bind:style="[styleObjectA, styleObjectB]">

组件
var mytemplate = Vue.extend({
template: "<div class='div'></div>"
})
Vue.component("my-component", mytemplate);


父子组件

标准写法

var child = Vue.extend({
template: "<div class='child'></div>"
})
var parent = Vue.extend({
template: "<div class='parent'><child></child></div>",
components: {
"child": child
}
})
Vue.component("parent", parent);

简单写法
Vue.component("parent", {
template: "<div class='parent'><child></child></div>",
components: {
"child": {
template: "<div class='child'></div>"
}
}
});

子组件用父组件的数据

var child = Vue.extend({
props: ['a'],
template: "<div class='child'>{{ a }}</div>",
data: function(){
return
// {
// a: "child's data"
// }
}
})
var parent = Vue.extend({
template: "<div class='parent'><child v-bind:a='a' ></child></div>",
components: {
"child": child
},
data: function(){
return {
a: "parent's data"
}
}
})

模板

<!-- 父组件-->
<script type="x-template" id="parent">
<div class='parent'>
<child></child>
<child></child>
</div>
</script>
<!-- 子组件-->
<script type="x-template" id="child">
<div class='child'>{{ a }}</div>
</script>
定义
var child = Vue.extend({
template: "#child",
data: function(){
return {
a: "child's data"
}
}
})
var parent = Vue.extend({
template: "#parent",
components: {
"child": child
},
data: function(){
return {
a: "parent's data"
}
}
})
// Vue.component("child", child)
Vue.component("parent", parent);

props 数据往子组件传递

props 为对象时,作为组件验证

$.on() 监听自定义事件
$.emit()触发,$.dispath() 向上冒泡 $.broadcast() 向下传递

过滤器 2.0废弃

{{ msg | filter }}
第一个字大写
capitalize
全部大写
uppercase
全部小写
lowercase
货币化
currency “¥”默认 $
复数
pluralize "item"
pluralize "st" "nd" "rd" "th" 再往后以最后面一个为准
源代码
json 4 缩进为4 default:2
延迟执行
debounce 500 default:300
@keyup="onKeyup | debounce 500"
限制循环
limitBy n m
n:限制几位 m:限制从m位开始,0为第一位
过滤
<input v-model="index" type="text" name="name" >
<ul>
<li v-for="item in msg | filterBy index in 'name' ">{{ item.name }} {{ item.age }} {{ item.sex }}</li>
</ul>

多字段搜索
<liv-for="user in users | filterBy searchText in 'name' 'phone'"></li>

插值表达式
{{}}
{{*value}}只更新一次

增加v-cloak属性,防止闪烁
[v-cloak]{ display: none }
数据遍历之前 用v-show 防止显示不正常数据

v-for 在tr里面不正常



组件:

1. 一般定义
<div id="example">
<my-component></my-component>
</div>

// 定义
var MyComponent = Vue.extend({
template: '<div>A custom component!</div>'
})

// 注册
Vue.component('my-component', MyComponent)

// 创建根实例
new Vue({
el: '#example'
})
2.局部注册
var Child = Vue.extend({ /* ... */ })

var Parent = Vue.extend({
template: '...',
components: {
// <my-component> 只能用在父组件模板内
'my-component': Child
}
})
3. 简化注册 注册语法糖
// 在一个步骤中扩展与注册
Vue.component('my-component', {
template: '<div>A custom component!</div>'
})

// 局部注册也可以这么做
var Parent = Vue.extend({
components: {
'my-component': {
template: '<div>A custom component!</div>'
}
}
})

利用模板穿的属性来构造模板
Vue.component('child', {
// 声明 props
props: ['msg'],
// prop 可以用在模板内
// 可以用 `this.msg` 设置
template: '<span>{{ msg }}</span>'
})
props 驼峰写法如:myMsg 在模板外属性应该写成 my-msg

v-bind:my-msg="abc" 可以简写为:my-msg="abc
:my-msg="1" 数字1作为一个属性来传递的,用:my-msg

冒泡事件“child-msg” 父组件接受事件function(msg){}对参数进行处理

this.$dispatch('child-msg', this.msg)
获取子组件的方式: 在自组件上定义 v-ref属性 用$refs属性获取自组建
<div id="parent">
<user-profile v-ref:profile></user-profile>
</div>
var parent = new Vue({ el: '#parent' })
// 访问子组件
var child = parent.$refs.profile

第一个程序
<divid="app">
{{ message }}
</div>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
})
双向绑定 v-model
<divid="app">
<p>{{ message }}</p>
<inputv-model="message">
</div>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
})

todo

<divid="app">
<ul>
<liv-for="todo in todos">
{{ todo.text }}
</li>
</ul>
</div>
new Vue({
el: '#app',
data: {
todos: [
{ text: 'Learn JavaScript' },
{ text: 'Learn Vue.js' },
{ text: 'Build Something Awesome' }
]
}
})
综合案例
<div id="app">
<input v-model="newtodo" v-on:keyup.enter="addtodo" type="text" name="" >
<ol>
<li v-for="todo in todos">
{{todo.text}}
<button v-on:click="removetodo($index)" type="button" name="button">X</button>
</li>
</ol>
</div>
<script type="text/javascript">
new Vue({
el: "#app",
data: {
newtodo: "",
todos: [
]
},
methods: {
addtodo: function(){
var text = this.newtodo.trim();
if(text){
this.todos.push({text: text});
this.newtodo = "";
}
},
removetodo: function(index){
this.todos.splice(index,1);
}
}
})
</script>


插值表达式 {{}} {{* msg }}单次不更新

指令 v-*

循环
v-for="item in items"
<div>{{ $index($key) }}: {{ item }}</div>

<div>
<spanv-for="n in 10">{{ n }} </span>
</div>

methods

计算属性
computed

v-model
双向绑定
2015-09-15

⬆︎TOP