一个例子学会Vue.js

Vue采用的MVVM设计模式

也就是说model和view绑定
model改变,view的内容改变,反之亦然

Vue主要有以下几个关键字

  • v-model 绑定模型
  • v-if 判断是否显示该dom
  • v-show 判断是否将该dom的display设为none
  • v-else if或者show为false时显示该dom
  • v-for 迭代
  • v-bind 绑定属性
  • v-on 绑定方法

我们以一个可查找的信息管理系统为例子

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
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="styles/demo.css" />
</head>

<body>
<div id="app">
<span>key</span>
<!-- 绑定model中search.key -->
<!-- 内容和下面每一列的数据进行比较 -->
<!-- 内容改变,下面的每一列都马上会进行比较 -->
<input type="text" v-model="search.key">
<legend>
Create New Person
</legend>
<div class="form-group">
<label>Name:</label>
<!-- 绑定model中newPerson.name -->
<input type="text" v-model="newPerson.name"/>
</div>
<div class="form-group">
<label>Age:</label>
<!-- 绑定model中newPerson.age -->
<input type="text" v-model="newPerson.age"/>
</div>
<div class="form-group">
<label>Sex:</label>
<!-- 绑定model中newPerson.sex -->
<select v-model="newPerson.sex">
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</div>
<div class="form-group">
<label></label>
<!-- @click是v-on:click的缩写 -->
<button @click="createPerson">Create</button>
</div>
</fieldset>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Sex</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<!-- 用v-for迭代,$index为每一个item的索引 -->
<!-- v-if判断为true则显示,否则则移除,这里更适合用v-show,v-show并不会移除dom只会将display属性改为none -->
<!-- 和搜索框内容进行比较 -->
<tr v-for="person in people" v-if="person.name.indexOf(search.key)>=0||person.sex.indexOf(search.key)>=0||person.age==search.key">
<td >{{ person.name }}</td>
<!-- :style是v-bind:style的缩写,满足条件则值为前面的,否则为后面的,固定的字符串要用' ',变量不需要用'' -->
<!-- v-bind后面还可以接其他的属性例如class,id -->
<td :style="person.age>30 ? 'color: red' : ' ' ">{{ person.age }}</td>
<!-- v-else元素必须立即跟在v-if或v-show元素的后面——否则它不能被识别 -->
<td v-if="person.sex =='Male'"></td>
<td v-else></td>
<td class="text-center"><button @click="deletePerson($index)">Delete</button></td>
</tr>
</tbody>
</table>
</div>
</body>
<script src="js/vue.js"></script>
<script>
// 初始化Vue
//el获取绑定的标签,#app获取id为app的dom,.app的话则获取class为app的dom
//data中为模型
//methods为方法
var vm = new Vue({
el: '#app',
data: {
search:{
key:""
},
newPerson: {
name: '',
age: 0,
sex: 'Male'
},
people: [{
name: 'Jack',
age: 30,
sex: 'Male'
}, {
name: 'Bill',
age: 26,
sex: 'Male'
}, {
name: 'Tracy',
age: 22,
sex: 'Female'
}, {
name: 'Chris',
age: 36,
sex: 'Male'
}]
},
methods:{
createPerson: function(){
this.people.push(this.newPerson);
// 添加完newPerson对象后,重置newPerson对象
this.newPerson = {name: '', age: 0, sex: 'Male'}
},
deletePerson: function(index){
// 删一个数组元素
this.people.splice(index,1);
}
}
})
</script>

</html>

不需要太多的解释,直接看代码就知道Vue用法是什么

效果图


代码