在事件处理程序中调用 event.preventDefault()
或 event.stopPropagation()
是很是常见的需求。尽管咱们能够在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。html
为了解决这个问题,Vue.js 为 v-on
提供了事件修饰符。以前提过,修饰符是由点开头的指令后缀来表示的。vue
.stop
.prevent
.capture
.self
.once
.passive
<!-- 阻止单击事件继续传播 --> <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>
使用修饰符时,顺序很重要;相应的代码会以一样的顺序产生。所以,用 v-on:click.prevent.self
会阻止全部的点击,而 v-on:click.self.prevent
只会阻止对元素自身的点击。浏览器
2.1.4 新增ide
<!-- 点击事件将只会触发一次 --> <a v-on:click.once="doThis"></a>
不像其它只能对原生的 DOM 事件起做用的修饰符,.once
修饰符还能被用到自定义的组件事件上。若是你尚未阅读关于组件的文档,如今大可没必要担忧。函数
2.3.0 新增性能
Vue 还对应 addEventListener
中的 passive
选项提供了 .passive
修饰符。ui
<!-- 滚动事件的默认行为 (即滚动行为) 将会当即触发 --> <!-- 而不会等待 `onScroll` 完成 --> <!-- 这其中包含 `event.preventDefault()` 的状况 --> <div v-on:scroll.passive="onScroll">...</div>
这个 .passive
修饰符尤为可以提高移动端的性能。spa
不要把 .passive
和 .prevent
一块儿使用,由于 .prevent
将会被忽略,同时浏览器可能会向你展现一个警告。请记住,.passive
会告诉浏览器你不想阻止事件的默认行为code