笔记来源:拉勾教育 - 大前端就业集训营
文章内容:学习过程中的笔记、感悟、和经验
Vue事件与表单处理
事件处理 - v-on
用于元素的事件绑定
书写方法:v-on:事件名=" 事件处理程序 " 可简写为 @事件名=" 事件处理程序 "
当事件程序代码较多时,可以把代码封装成函数放在methods中
<body>
<div id="app">
<!-- 绑定数据 -->
<p>{{content}}</p>
<!-- 使用三种方法书写click事件 -->
<!-- 标准v-on方法 -->
<button v-on:click="content='新的内容1'">点我</button>
<!-- @方法简写 -->
<button @click="content='新的内容2'">点我</button>
<!-- 使用函数 -->
<button @click="fn">点我</button>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
// 数据
content: '默认内容'
},
methods: {
// 函数
fn() {
this.content = '新的内容3'
}
}
})
</script>
</body>
操作事件对象
设置事件程序后,methods中的函数可以接收一个时间对象参数
methods: {
// 函数可以接受一个参数,这个参数就是事件对象
fn(event) {
console.log(event)
this.content = '新的内容3'
}
}
如果我们想在视图(HTML)中传递参数,那就需要把事件对象写为event )"`,这时当vue看到$event就会知道这是事件对象
// 我们想在事件处理函数中传入参数,还想要使用事件对象,就要把事件对象写成$event
<button @click="fn2(200,$event)">点我</button>
//下面的函数
fn2(x, event) {
console.log(x)
console.log(event)
}
表单输入绑定 - v-model
以下绑定操作都遵循双向绑定
用于给input、textarea(文本域)、select元素设置双向数据绑定
body>
<div id="app">
<!-- 双向数据绑定 v-model,一方数据修改value都会更改 -->
<input type="text" v-model="value">
<textarea v-model="value" cols="30" rows="10"></textarea>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
// 双向数据绑定数据
value: '123'
},
methods: {}
})
</script>
</body>
输入框绑定
单行输入框input和多行输入框textarea
<body>
<div id="app">
<!-- 输入框绑定-->
<p>input输入框的内容为:{{value1}}</p>
<input type="text" v-model="value1">
<p>textarea输入框的内容为:{{value2}}</p>
<textarea v-model="value2"></textarea>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
// 双向数据绑定数据
value1: '',
value2: ''
},
methods: {}
})
</script>
</body>
单选按钮绑定
<body>
<div id="app">
<!-- 单选按钮绑定 -->
<p>数据为:{{value}}</p>
<!-- 书写一对单选框 -->
<!-- radio表示单选按钮,id用于和后面的label中绑定,value为值,双向绑定数据 -->
<input type="radio" id="one" value="1" v-model="value">
<!-- label绑定单选按钮,for绑定指定id的元素 -->
<label for="one">选项1</label>
<input type="radio" id="tow" value="2" v-model="value">
<label for="tow">选项2</label>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
// 数据
value: ''
},
methods: {}
})
</script>
</body>
当我们点击两个单选按钮的时候数据就会发生改变,也可以通过修改数据更改视图的选择
复选框框绑定
复选框分为单个复选框(常用于勾选用户协议)和多个复选框两种情况
<body>
<div id="app">
<!-- 复选框绑定 -->
<!-- 情形1:只有一个复选框(例如:常用语用户勾选阅读条款) -->
<p>只有一个复选框,数据内容为:{{value1}}</p>
<input type="checkbox" id="onlyOne" value="只有一个复选框内容" v-model="value1">
<label for="onlyOne">选我</label>
<!-- 情形2:有多个复选框 -->
<p>多个复选框,数据内容为:{{value2}}</p>
<input type="checkbox" id="one" value="内容1" v-model="value2">
<label for="one">选我</label>
<input type="checkbox" id="tow" value="内容2" v-model="value2">
<label for="tow">选我</label>
<input type="checkbox" id="three" value="内容3" v-model="value2">
<label for="three">选我</label>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
// value1单个选项数据
value1: '',
// value多个选项数据为数组
value2: []
},
methods: {}
})
</script>
</body>
注意事项:
- 单个复选框数据为空字符串即可,多个复选框就需要设置为数组
- 当只有一个复选框的情况下,无论value是什么,选中和取消值都是布尔值,但是当前的value也需要设置
- 多个复选框则会把选中的复选框的value值添加到data数据的数组中
选择框绑定
分为单选绑定和多选绑定两种情况,书写也不同
<body>
<div id="app">
<!-- 选择框绑定 -->
<!-- 情形1:单选绑定 -->
<!-- p标签绑定数据 -->
<p>单选绑定,数据为:{{value1}}</p>
<!-- selcet绑定value1 -->
<select v-model="value1">
<!-- 第一个设置为空,不写数据,用于提示用户 -->
<option value="">请选择</option>
<option value="1">选项1</option>
<option value="2">选项2</option>
<option value="3">选项3</option>
</select>
<!-- 情形2:多选绑定 -->
<p>多选绑定,数据为:{{value2}}</p>
<!-- 设置multiple表示允许多选 -->
<select v-model="value2" multiple>
<option value="1">选项1</option>
<option value="2">选项2</option>
<option value="3">选项3</option>
</select>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
// value1单选
value1: '',
// value多选数据为数组
value2: []
},
methods: {}
})
</script>
</body>
注意事项
- 同复选框一样,单选数据为空字符串即可,多选就需要设置为数组
- 单选数据会把选择的option的value绑定给数据
- 多选数据会添加进数组
总结
- input输入框:绑定字符串值
- textarea输入框:绑定字符串值
- radio单选按钮:绑定字符串值
- checkbox复选框:单个绑定布尔值,多个绑定数组
- selrct选择框:单选绑定字符串,多选绑定数组
修饰符
以点为开头的指令后缀,用于给当前指令设置特殊操作,依赖于指令
事件修饰符
官方文档:cn.vuejs.org/v2/guide/ev…
直接写在事件后面即可,例如@click.修饰符
- prevent修饰符
- 用于阻止默认的事件行为,相当于
event.prevenDefault()
- 用于阻止默认的事件行为,相当于
- stop修饰符
- 阻止事件传播,相当于
event.stopPropagation()
- 阻止事件传播,相当于
- once修饰符
- 用于设置事件只能触发一次
<body>
<div id="app">
<!-- 事件修饰符 -->
<!-- prevent阻止默认事件,这里可以阻止a标签的自动跳转操作,也可以直接写为 @click.prevent-->
<a href="http://www.baidu.com" @click.prevent="fn">跳转</a>
<!-- stop阻止事件传播 -->
<div @click="console.log('我是父亲')" style="width: 100px;height: 100px;background: pink;">
<!-- 添加stop修饰符阻止事件冒泡 -->
<button @click.stop="console.log('我是儿子')">按钮</button>
</div>
<!-- once设置事件只能执行一次 -->
<button @click.once="console.log('你应该只能看见我一次')">once修饰符</button>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {},
methods: {
fn() {
console.log('点击a标签了')
}
}
})
</script>
</body>
注意事项
- 如果我们只是想阻止默认行为,那么直接写prevent即可,后边不写事件处理程序。例如
@click.prevent可以放在a标签上阻止默认跳转 - 修饰符允许连写,例如
@click.prevent.stop="事件程序"
按键修饰符
官方文档:cn.vuejs.org/v2/guide/ev…
按键码:将按键的按键码作为修饰符使用以标示按键操作方式
常规按键修饰符
<body>
<div id="app">
<!-- 按键(码)修饰符 -->
<!-- 设置只有当抬起按键码为65的按键(a)的时候才会触发事件 -->
<input type="text" @keyUp.65="fn">
<!-- 如果是字母按键,可以直接使用字母当修饰符 -->
<input type="text" @keyUp.a="fn">
</div>
<script>
const vm = new Vue({
el: '#app',
data: {},
methods: {
fn() {
console.log('抬起按键a了')
}
}
})
</script>
</body>
特殊按键
键盘中类似esc、enter、delete、空格、上下左右等功能按键,为了更好的兼容性,首选内置别名
<body>
<div id="app">
<!-- 特殊按键(码)修饰符,建议直接写别名即可,具体可以参考官方文档-按键修饰符 -->
<input type="text" @keyUp.esc="fn">
</div>
<script>
const vm = new Vue({
el: '#app',
data: {},
methods: {
fn() {
console.log('抬起按键了')
}
}
})
</script>
</body>
注意:按键修饰符可以连写,例如 @keyUp.a.b.c="fn"按下a/b/c都可以触发事件
系统修饰符
处理系统按键的修饰操作,系统按键指的是ctrl、alt、shift等,这些按键单独点击一般无效,必须搭配其他按键使用
官方文档:cn.vuejs.org/v2/guide/ev…
系统修饰符可以单独使用也可以组合使用
<body>
<div id="app">
<!-- 系统修饰符,这里组合使用.ctrl.q -->
<input type="text" v-model="value" @keyUp.ctrl.q="fn">
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
value: ''
},
methods: {
fn() {
this.value = ''
console.log('我清空了输出框内容')
}
}
})
</script>
</body>
鼠标按键修饰符
设置点击事件由鼠标的哪个按键触发完成
常用修饰符:left左键(默认)、right右键、middle中键
<body>
<div id="app">
<!-- 鼠标按键修饰符,默认不写表示左键触发,可以通过添加修饰符更改出发按钮 -->
<button @click.right="fn">点右键触发我</button>
<button @click.middle="fn">点中间键触发我</button>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
value: ''
},
methods: {
fn() {
console.log('点击了')
}
}
})
</script>
</body>
v-model修饰符
trim修饰符
自动过滤去掉用户输入的首尾两端的空格,一般用于输入框
lazy(懒)修饰符
用于将v-model触发方式由立即更改为失去焦点的时候才触发,这样能节省资源,避免不必要的频繁修改数据
number修饰符
自动将用户输入的值转换为数值类型,如果无法被parseFloat()转换,则返回原始内容,很适合需要用户输入数字的内容,就不需要我们在进行手动转换数字了