事件监听
分为以下三部分
- v-on的基本使用
- v-on的参数
- v-on的修饰符
v-on的基本使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<div id="app">
<h2>{{counter}}</h2>
<button @click="increment">+</button>
</div>
......
<script>
const app = new Vue({
el: '#app',
data: {
counter: 0
},
methods: {
increment() {
this.counter++
}
}
})
</script>
|
increment是一个方法名,定义在app的Vue实例的方法中
v-on的参数
1
|
<button @click="increment">+</button>
|
这里increment
后面没有跟(),这是省略的写法,括号内无参数时,Vue会把浏览器生成的event事件对象作为参数传入到方法
1
|
<button @click="btn3Click(123,$event)">3</button>
|
如果既需要event对象,又需要参数,可以用上述写法
v-on的修饰符
基本用法:
1
2
3
4
|
<div @click="divClick">
aaaa
<button @click.stop="btnClick">按钮</button>
</div>
|
四种常用的修饰符:
- .stop:阻止事件冒泡
- .prevent:阻止默认事件
- .enter:监听某个键盘键帽的点击
- .once:该事件只触发一次
条件判断
- v-if、v-else-if、v-else
- v-show
v-if、v-else-if、v-else
很简单,举例:
1
2
3
4
5
6
7
|
<div id="app">
<h2 v-if="score>=90">优秀</h2>
<h2 v-else-if="score>=80">良好</h2>
<h2 v-else-if="score>=60">及格</h2>
<h2 v-else>不及格</h2>
</div>
<!--会根据返回的布尔值决定显示哪一个标签-->
|
v-show
- 当切换频率高时选择v-show,只有一次通常使用v-if,因为频繁操作DOM影响性能
1
2
|
<!-- v-show HTML节点仍然存在 只是display:none -->
<h2 v-show="isShow">{{message}}</h2>
|
循环遍历
这里主要记录下参数的问题
- v-for遍历数组
- v-for遍历对象
- v-for使用过程添加key(绑定key)
- 哪些数组方法是响应式的
v-for遍历数组
参数:元素,index
1
2
3
|
<ul>
<li v-for="(item,index) in names">{{index}}-{{item}}</li>
</ul>
|
v-for遍历对象
参数:值,key,index
1
2
3
|
<ul>
<li v-for="(value,key,index) in info">{{index}}.{{key}}:{{value}}</li>
</ul>
|
v-for使用过程添加key(绑定key)
1
2
3
4
5
|
<ul>
<!-- 保证绑定的key和要展示的item是一样的(key是唯一不可变的) 可以使得Diff算法识别此节点并且找到正确的位置插入新的节点 -->
<!-- key的作用就是为了更高效的更新虚拟DOM -->
<li v-for="item in letters" :key="item">{{item}}</li>
</ul>
|
哪些数组方法是响应式的
响应式的:
- push
- pop
- shift
- unshift
- splice
- sort
- reverse
- set—
Vue.set(this.letters,0,'bbb')
非响应式的:
this.letters[0]='a'
通过索引值修改数组中的元素不是响应式的
v-model
- 基本使用方法
- v-model原理
- radio,checkbox,select
- v-model修饰符
基本使用方法
直接举例,此时输入什么值,显示什么值
1
2
3
|
<div id="app">
<input type="text" v-model="message"> {{message}}
</div>
|
v-model原理
v-model等同于:
1
2
3
4
5
6
7
8
|
<!-- <input type="text" v-model="message"> -->
<!-- input有一个input事件 -->
<!-- <input type="text" :value="message" @input="valueChange"> -->
<input type="text" :value="message" @input="message=$event.target.value">
<h2>{{message}}</h2>
<!-- textarea也可以用v-model -->
|
radio,checkbox,select
radio(选哪个,sex就变成它的value):
1
2
3
4
5
6
7
|
<label for="male">
<input type="radio" id="male" value="男" v-model="sex">男
</label>
<label for="female">
<input type="radio" id="female" value="女" v-model="sex">女
</label>
<h2>您选择的性别是{{sex}}</h2>
|
checkbox(直接上学习的代码了):
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
|
<div id="app">
<!-- checkbox单选框 -->
<label for="agreement">
<input type="checkbox" id="agreement" v-model="isAgree">同意协议
</label>
<!--isAgree是个布尔值-->
<h2>你选择的是{{isAgree}}</h2>
<!-- checkbox多选框 -->
<input type="checkbox" value="足球" v-model="hobbies">足球
<input type="checkbox" value="篮球" v-model="hobbies">篮球
<input type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
<input type="checkbox" value="打游戏" v-model="hobbies">打游戏
<h2>您的爱好是{{hobbies}}</h2>
<!-- 使用for循环 -->
<label v-for="item in originHobbies" :for="item">
<input type="checkbox" :value="item" v-model="hobbies" :id="item">{{item}}
</label>
</div>
<script>
const app = new Vue({
el: '#app',
data: {
message: '你好啊',
isAgree: false,
hobbies: [],
originHobbies: ['足球', '篮球', '打游戏', '羽毛球']
}
})
</script>
|
select(用法很简单):
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
|
<div id="app">
<!-- 1. 选择一个 -->
<select name="abc" id="" v-model="fruit">
<option value="苹果" >苹果</option>
<option value="香蕉" >香蕉</option>
<option value="橘子" >橘子</option>
<option value="梨子" >梨子</option>
</select>
<h2>您选择的水果是:{{fruit}}</h2>
<!-- 2.选择多个 -->
<select name="abc" id="" v-model="fruits" multiple>
<option value="苹果">苹果</option>
<option value="香蕉">香蕉</option>
<option value="橘子">橘子</option>
<option value="梨子">梨子</option>
</select>
<h2>您选择的水果是:{{fruits}}</h2>
</div>
<script>
const app = new Vue({
el: '#app',
data: {
message: '你好啊',
fruit: '香蕉',
fruits: []
}
})
|
v-model的修饰符
基本使用:
1
2
|
<input type="text" v-model.lazy="message">
<h2>{{message}}</h2>
|
- lazy:按下enter或者失去焦点时才会改变
- number: 默认情况下,v-model赋值的都是string类型,加上.number会把它转为Number
- trim:去除输入的两边空格,换行符等等