我们可以使用
v-on
指令 (简写为@
) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click="handler"
或@click="handler"
。事件处理器 (handler) 的值可以是:
内联事件处理器:事件被触发时执行的内联 JavaScript 语句 (与
onclick
类似)。方法事件处理器:一个指向组件上定义的方法的属性名或是路径。
1.1内联事件处理器
const count = ref(0) <p>Count is: {{ count }}p>1.2方法事件处理器
随着事件处理器的逻辑变得愈发复杂,内联代码方式变得不够灵活。因此
v-on
也可以接受一个方法名或对某个方法的调用。event 传入的是一个button 对象
event.target
const name = ref('Vue.js') function greet(event) { alert(`Hello ${name.value}!`) // `event` 是 DOM 原生事件 if (event) { alert(event.target.tagName) } } <button @click="greet">Greetbutton>法事件处理器会自动接收原生 DOM 事件并触发执行。在上面的例子中,我们能够通过被触发事件的
event.target.tagName
访问到该 DOM 元素。1.3在内联处理器中调用方法
除了直接绑定方法名,你还可以在内联事件处理器中调用方法。这允许我们向方法传入自定义参数以代替原生事件:
function say(message) { alert(message) } <button @click="say('bye')">Say byebutton>1.4Vue 为
v-on
提供了事件修饰符。
<a @click.stop="doThis">a> <form @submit.prevent="onSubmit">form> <a @click.stop.prevent="doThat">a> <form @submit.prevent>form> <div @click.self="doThat">...div> <div @click.capture="doThis">...div> <a @click.once="doThis">a> <div @scroll.passive="onScroll">...div>
在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦:
//
@input="evnet" 或v-on:input="evnet"
:value="text" @input="event => text = event.target.value"> v-model 指令帮我们简化了这一步骤: "text">ci外,
v-model
还可以用于各种不同类型的输入,、
元素。它会根据所使用的元素自动使用对应的 DOM 属性和事件组合:
- 文本类型的
和
元素会绑定
value
property 并侦听input
事件;和
会绑定
checked
property 并侦听change
事件;会绑定
value
property 并侦听change
事件。