一、v-on 简写
v-on 指令可以简写为 @:
<button v-on:click="num++">按钮</button><button @click="num++">按钮</button>
二、事件处理方法
每一个 Vue 实例身上,都有一个 methods 属性,用来设置实例的方法。
语法结构如下:
new Vue({methods: {方法名一() {},方法名二() {},// ...}})
调用 methods 方法
通常,methods 中的每一个方法,都可以在 HTML 中调用,也可以在其他 methods 方法中调用。
例如在 HTML 中调用:
<button @click="方法名">按钮</button><h1>{{方法名()}}</h1>
又例如在一个 methods 方法中调用另一个 methods 方法:
new Vue({methods: {方法名一() {this.方法名二();},方法名二() {//...}}})
三、事件传值
在调用 methods 的方法时,还可以通过小括号来进行传值。
基础语法:
<button @click="方法名一(要传递的值)">按钮</button><script>new Vue({methods: {方法名一(任意变量名) {// ...},方法名二() {}}})</script>
- 有时也需要在内联语句处理器中访问原始的 DOM 事件。
- 可以用特殊变量
$event把它传入方法: ```html
- 可以用特殊变量
// … methods: { warn: function (message, event) { // 现在我们可以访问原生事件对象 if (event) { event.preventDefault() } alert(message) } }
<a name="yjxeW"></a>### 四、事件修饰符- 为什么要使用事件修饰符?- 在事件处理程序中调用 `event.preventDefault()` 或 `event.stopPropagation()` 是非常常见的需求。- 所以我们就简化成修饰符- 常见的修饰符有什么?- .stop- .prevent- .capture- .self- .once- .passive```html<!-- 阻止单击事件继续传播 --><a v-on:click.stop="doThis"></a><!-- 提交事件不再重载页面 --><form v-on:submit.prevent="onSubmit"></form><!-- 修饰符可以串联 --><a v-on:click.stop.prevent="doThat"></a><!-- 只有修饰符 --><form v-on:submit.prevent></form><!-- 添加事件监听器时使用事件捕获模式 --><!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 --><div v-on:click.capture="doThis">...</div><!-- 只当在 event.target 是当前元素自身时触发处理函数 --><!-- 即事件不是从内部元素触发的 --><div v-on:click.self="doThat">...</div><!-- 点击事件将只会触发一次 --><a v-on:click.once="doThis"></a><!-- Vue 还对应 addEventListener 中的 passive 选项提供了 .passive 修饰符 --><!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 --><!-- 而不会等待 `onScroll` 完成 --><!-- 这其中包含 `event.preventDefault()` 的情况 --><div v-on:scroll.passive="onScroll">...</div><!-- 这个 .passive 修饰符尤其能够提升移动端的性能 -->
- 使用修饰符时,顺序很重要
- 用
v-on:click.prevent.self会阻止所有的点击, - 而
v-on:click.self.prevent只会阻止对元素自身的点击。
- 用
注意
你可能注意到这种事件监听的方式违背了关注点分离 (separation of concern) 这个长期以来的优良传统。
- 但不必担心,因为所有的 Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上,
- 它不会导致任何维护上的困难。
- 实际上,使用
v-on有几个好处:- 扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。
- 因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。
- 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何清理它们。
