v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。

然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on 指令中是不可行的。因此 v-on 还可以接收一个需要调用的方法名称。

有时也需要在内联语句处理器中访问原始的 DOM 事件。可以用特殊变量 $event 把它传入方法

  1. <div id="app">
  2. <div id="example-1">
  3. //绑定单击事件
  4. <button v-on:click="counter += 1"> 数值 : {{ counter }} </button><br />
  5. //绑定双击事件
  6. <button v-on:dblclick="greet('abc', $event)">Greet</button>
  7. </div>
  8. </div>
  9. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  10. <script type="text/javascript">
  11. var vm = new Vue({
  12. el : "#app",
  13. data : {
  14. counter: 0,
  15. name : "vue"
  16. },
  17. methods:{
  18. greet : function (str, e) {
  19. alert(str);
  20. console.log(e);
  21. }
  22. }
  23. });
  24. </script>

事件修饰符

在事件处理程序中调用 event.preventDefault()event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。

  • .stop
  • .prevent
  • .capture
  • .self
  • .once
  • .passive
  1. <div id="app">
  2. <!-- 阻止单击事件继续传播 -->
  3. <a v-on:click.stop="doThis"></a>
  4. <!-- 提交事件不再重载页面 -->
  5. <form v-on:submit.prevent="onSubmit"></form>
  6. <!-- 修饰符可以串联 -->
  7. <a v-on:click.stop.prevent="doThat"></a>
  8. <!-- 只有修饰符 -->
  9. <form v-on:submit.prevent></form>
  10. <!-- 添加事件监听器时使用事件捕获模式 -->
  11. <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
  12. <div v-on:click.capture="doThis">...</div>
  13. <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
  14. <!-- 即事件不是从内部元素触发的 -->
  15. <div v-on:click.self="doThat">...</div>
  16. </div>
  17. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  18. <script type="text/javascript">
  19. var vm = new Vue({
  20. el : "#app",
  21. data : {
  22. counter: 0,
  23. name : "vue"
  24. },
  25. methods:{
  26. //此处放绑定的事件函数名,在函数内做事件处理
  27. doThis:function(){},
  28. onSubmit:function(){},
  29. doThat:function(){},
  30. doThis:function(){}
  31. }
  32. });
  33. </script>

注意:
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。
因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击
官方新增更多修饰符详看:事件修饰符按键修饰符系统按键修饰符