Vue3官网基础(四)事件处理(v-on、事件修饰符.passive.self.capture)、表单绑定输入 v-model(textarea、checkbox、radio、select、值绑定、修饰符 )
总结:
补充
- Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
- truthy(真值):在 JavaScript 中,truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为 假值(即除
false
、0
、""
、null
、undefined
和NaN
以外皆为真值)。括号内都是假值falsy。- .prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()
- ==Event.preventDefault方法取消浏览器对当前事件的默认行为。==比如点击链接后,浏览器默认会跳转到另一个页面,使用这个方法以后,就不会跳转了;再比如,按一下空格键,页面向下滚动一段距离,使用这个方法以后也不会滚动了。该方法生效的前提是,事件对象的cancelable属性为true,如果为false,调用该方法没有任何效果。
事件处理 v-on
访问原始DOM事件
可以用特殊变量
$event
把它传入方法<button @click="warn('Form cannot be submitted yet.', $event)"> Submit </button> --------------------------------------------------- // ... methods: { warn(message, event) { // 现在可以访问到原生事件 if (event) { event.preventDefault() } alert(message) } }
事件修饰符
- 类别
.stop
:阻止事件.prevent
:取消浏览器对当前事件的默认行为.capture
:使用事件捕获模式, 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理。.capture先执行父级的函数,再执行子级的触发函数(一般用法),.self
:self是只执行子级本身的函数,capture和self主要是函数执行顺序的问题。.once
:事件将只会触发一次.passive
:默认行为将会立即触发,这个.passive
修饰符尤其能够提升移动端的性能。- 注意
- 使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用
v-on:click.prevent.self
会阻止所有的点击,而v-on:click.self.prevent
只会阻止对元素自身的点击。- 不要把
.passive
和.prevent
一起使用,因为.prevent
将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive
会告诉浏览器你不想阻止事件的默认行为。系统修饰键
.meta
- 在 Mac 系统键盘上,meta 对应 command 键 (⌘)。在 Windows 系统键盘 meta 对应 Windows 徽标键 (⊞)。在 Sun 操作系统键盘上,meta 对应实心宝石键 (◆)。
ctrl
- 只有在按住
ctrl
的情况下释放其它按键,才能触发keyup.ctrl
。而单单释放ctrl
也不会触发事件。
.exact
修饰符
允许你控制由精确的系统修饰符组合触发的事件。
<!-- 有且只有 Ctrl 被按下的时候才触发 --> <button @click.ctrl.exact="onCtrlClick">A</button> <!-- 没有任何系统修饰符被按下的时候才触发 --> <button @click.exact="onClick">A</button>
为什么在 HTML 中监听事件?
- 扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。
- 因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。
- 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何清理它们。
表单绑定输入 v-model
- 基础用法
- text (文本)和 textarea (多行文本)元素使用
value
属性 和input
事件;- checkbox (复选框、圆角正方形)和 radio (单选框、圆形)使用
checked
属性 和change
事件;- select (选择框)字段将
value
作为 prop 并将change
作为事件。值绑定
v-model
绑定的值通常是静态字符串 (对于复选框也可以是布尔值)有时我们可能想把值绑定到当前活动实例的一个动态 property 上,这时可以用
v-bind
实现,此外,使用v-bind
可以将输入值绑定到非字符串。<input type="radio" v-model="pick" v-bind:value="a" /> ------------------------------------------------------- // 当选中时 vm.pick === vm.a
修饰符
.lazy
:在“change”时而非“input”时更新.number
:自动将用户的输入值转为数值类型.trim
:自动过滤用户输入的首尾空白字符
1. 事件处理
监听事件
我们可以使用 v-on
指令 (通常缩写为 @
符号) 来监听 DOM 事件,并在触发事件时执行一些 JavaScript。用法为 v-on:click="methodName"
或使用快捷方式 @click="methodName"
例如:
<div id="basic-event">
<button @click="counter += 1">Add 1</button>
<p>The button above has been clicked {
{ counter }} times.</p>
</div>
Vue.createApp({
data() {
return {
counter: 0
}
}
}).mount('#basic-event')
结果:
事件处理方法
然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on
指令中是不可行的。因此 v-on
还可以接收一个需要调用的方法名称。
例如:
<div id="event-with-method">
<!-- `greet` 是在下面定义的方法名 -->
<button @click="greet">Greet</button>
</div>
Vue.createApp({
data() {
return {
name: 'Vue.js'
}
},
methods: {
greet(event) {
// `methods` 内部的 `this` 指向当前活动实例
alert('Hello ' + this.name + '!')
// `event` 是原生 DOM event
if (event) {
alert(event.target.tagName)
}
}
}
}).mount('#event-with-method')
结果:
内联处理器中的方法
除了直接绑定到一个方法,也可以在内联 JavaScript 语句中调用方法:
<div id="inline-handler">
<button @click="say('hi')">Say hi</button>
<button @click=