1:简介

从两年前我学习web编程开始,我参与或完成了好几个web项目,这几个web项目都是比较简单的、给自己练习用的,而在开发过程中,我一直使用js+html+css+mdui。使用单纯的原生语言和最基础的一个css库开发,体验是很不好的,我一直想找一个好用的前端开发方案,让开发变得简单,直到认识了vue。

这不是我第一次学习vue,早在一年前,我就学习过一段时间,可惜当时没有好的web练手项目。导致vue在学习之后就荒废了,后来的项目开发也没有去使用它。经过了几个项目开发,才感觉到,我真的需要将vue好好的利用起来。于是在我备考之余,重新来学习vue。之后可能还会学习Vue Dev-ui。它提供的组件很丰富,我觉得可以完全替代mdui。

2:Hello World

vue使用script标签引入

一个简单的html实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id='box'>
{{1+1}}
{{myname}}
{{myhtml}}
<!-- v-指令 -->
<div v-html="myhtml"></div>
</div>
<script>
new Vue({
el:'#box',
data:{
myname:"qifei",
myjob:"student",
myhtml:"<b>hello world</b>"
}
})
</script>

3:v if和v show

v-if:创建和删除节点

v-show:显示和隐藏节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div id='box'>
<div v-show="isShow"></div>
<div v-if="isCreated"></div>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
isShow:true,
isCreated:true
}
})
vm.isShow=false //控件显示隐藏
vm.isCreated = false //控件创建和删除
</script>

4:class绑定和按钮

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
<div id='box'>
<button @click="handleClick()"></button>
<div :class="isActive?'red':'yellow'">动态class-三目写法</div>
<div :class="classObj">动态class-字典写法</div>
<div :class="classArr">动态class-数组写法</div>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
isActive:true,
classObj:{
a:true,
b:true
},
classArr:['a','b']
},
methods:{
handleClick(){
this.isActive = !this.isActive
}
}
})
vm.classObj.a = false
</script>

字典写法,不能通过添加键值对来增加class。而数组写法,可以通过pop(),push()方法添加元素来怎加class

5:style绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id='box'>

<div :style="'background:'+(isActive?'red':'yellow')">动态绑定style-三目写法</div>
<div :style="styleObj">动态绑定style-对象写法</div>
<div :style="styleArr">动态绑定style-数组写法</div>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
isActive:true,
styleObj:{
background:'red',
backgroundColor:'red'
},
styleArr:[{backgroud:'red'}]
}
})
vm.classObj.a = false
</script>

数组写法,可以通过push()添加新的样式,字典写法不能新加。

6:条件渲染

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div id='box'>
<div v-if="isCreated">动态创建</div>
<div v-else>动态创建</div>
<div v-if="datalist.length">
<li v-for="data in datalist">
{{data}}}
</li>
</div>
<div v-else-if="datalist.length >=3">
if lager than 2
</div>
<div>
empty
</div>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
isCreated:true,
datalist:['111','222','333']
}
})
</script>

7:列表渲染

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id='box'>
<li v-for="data in datalist" key="data.id">
{{data}}}
</li>
<li v-for="(data,key) in dataObj">
{{data}}} ---{{key}}
</li>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
datalist:['111','222','333'],
dataObj:{
abc:'abio'
}
}
})
vm.datalist.push('666')
</script>

关键字可以是 in 也可以是 of

8:列表数组检测

filter(),contact(),map()方法对原数组没有影响,视图不会更新。

通过索引值修改数组,视图不会更新。

通过splice或者,

Vue.set(datalist,0,’111’)

9:列表过滤引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<div id='box'>
<input type="text" @input="handleInput()" v-model="mytext"/>
<li v-for="data in datalist" key="data.id">
{{data}}}
</li>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
mytext:'',
datalist:['111','222','333'],
list:['111','222','333']
},
methods:{
handleInput(){
var datalist = this.list.filter(item=>item.indexOf(this.mytext)>-1)
}
}
})
vm.datalist.push('666')
</script>

10:事件处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id='box'>
<button @click="handleClick"></button>
<button @click="handleClick()"></button>
<button @click="javascript:"></button>
</div>
<script>
vm = new Vue({
el:'#box',
data:{
},
methods:{
handleClick(){}
}
})
vm.datalist.push('666')
</script>

评论