v-on:click(简写@click)绑定事件加括号和不加括号

应该是 Vue 对函数调用表达式额外用了一个函数做了层包装。

事先说明:加与不加括号的区别在于事件对象参数 event 的处理。不加括号时,函数第一个参数为 event,加了括号后,需要手动传入 $event 才能获得事件对象。

1、如果事件绑定的方法没有参数可以选择加括号也可以不加括号

 1 <template>
 2   <div>
 3     <input type="button" value="按钮1" v-on:click="fn">
 4     <input type="button" value="按钮2" v-on:click="fn()">
 5   </div>
 6 </template>
 7 
 8 <script>
 9   export default {
10     data() {
11       return {
12         a:10
13       }
14     },
15     methods:{
16       fun(){
17         console.log(this.a)
18       }
19     }
20   }
21 </script>

上面的函数调用的时候,加不加括号,效果是一样的。

2、如果不加括号,函数的第一个参数为 event 。

 1 <template>
 2   <div>
 3     <input type="button" value="按钮1" v-on:click="fn">
 4   </div>
 5 </template>
 6 
 7 <script>
 8   export default {
 9     data() {
10       return {
11         a:10
12       }
13     },
14     methods:{
15       fun(e){
16         console.log(e)
17       }
18     }
19   }
20 </script>

3、如果加了括号,需要手动传入 $event 才能获得事件对象。

<template>
  <div>
    <input type="button" value="按钮1" v-on:click="fn($event)">
  </div>
</template>

<script>
  export default {
    data() {
      return {
        a:10
      }
    },
    methods:{
      fun(e){
        console.log(e)
      }
    }
  }
</script>

如果 v-on:click="fn()" 这里不手动添加 $event ,那么 fun 函数里面的 console.log(e) 打印出来的就是 undefined 。

4、父子组件的引用:

  涉及到父子组件的引用,有时候需要传递额外的参数,必须加括号,第一个参数为 $event ,后面跟额外的参数,具体可参考 vue父子组件之间的传额外的参数

原文地址:https://www.cnblogs.com/smile-fanyin/p/14649482.html