精通Vue(2):绑定事件click详解_vue事件绑定在哪个生命周期

boyanx3个月前技术教程24

说明:为了保持系列完整性,作者将Vue基础知识点也带着写一遍,可能要好多节,之后我们再讨论复杂的问题,不然没有根基。同时也照顾零基础的同学一块学习。

事件click

上篇我们已经入门Vue了,为了做实验,我们学习button的click绑定,这样可以方便后面做实验。所以学习哪个知识点是按照实验的目标进行的,没有特别的先后顺序。

问题提出

我想在Vue模板中使用button按钮,点击之后弹出一个alert对话框。这节,我们就解决这一个问题。

第一种方式:使用v-on:xx

v-on是专门绑定事件的,我们想绑定什么就绑定什么,click是其中的一种,代码如下:

<button v-on:click='handleClick'>点我</button>

这句代码最后的结果是,将当前的button添加了一个事件,熟悉DOM原生知识的同学知道,绑定事件是通过addEventListener进行的,那么这个按钮就添加了一个click事件,如下图所示:

那么当实际点击按钮时,DOM就会查找click回调函数,然后执行。

第二种方式:使用@click='xx'

@是v-on的另一种写法,两者等价就不再多写,代码如下:

<button @click='handleClick'>点我</button>

<!-- 等价于 -->

<button v-on:click='handleClick'>点我</button>

第三种方式:自定义事件,使用@add='xx'

公式:@自定义事件名="xx"

这种方式等价于v-on:add='xx',但是这个事件我们发现它不是DOM原生事件,但不管怎样,它也被绑到button上了,代码如下:

<button @click='handleClick' @add='addEvent'>点我</button>

图示:

可以看到按钮被绑了两个事件,但是add在这里好像没什么用处,因为在DOM事件中是不会触发add的,所以结论是:我们一般都只绑定DOM相关的事件,比如click,mouseenter等之类的。

完整的测式代码

<div id="app">
  <div>
    <button @click="handleClick">点我</button>
  </div>
</div>
<script src="../vue.js"></script>
<script>
  var vm = new Vue({
    el: '#app',
    data() {
      return {}
    },
    methods: {
      handleClick() {
        alert('button被点击了')
      }
    }
  });

</script>

说明:button按钮绑定一个click回调,函数名为handleClick。

这个代码运行的很好。

事件修饰符

事件修饰符就是在事件的创建中再加一些参数,比如最常见的阻止冒泡,如下所示:

模拟代码如下:

<div id="app">
    <div @click="parentClick">
        <button @click="handleClick">点我</button>
    </div>
</div>
<script src="../vue.js"></script>
<script>
    var vm = new Vue({
        el: '#app',
        data() {
            return {
            }
        },
        methods: {
            parentClick(){
                alert('父亲被点击了!!')
            },
            handleClick() {
                alert('button被点击了')
            }
        },
    });
</script>

当button的click事件触发之后,它会一路上升到父元素及祖先元素,并挨个问要不要处理一下。此处有一个父级div也做了一个click回调,因此得到触发。

假如我们不想让事件往上跑,就可以让事件阻止冒泡,那么就可以通过修饰符让Vue来做这个事。代码如下:

<div id="app">
    <div @click="parentClick">
        <button @click.stop="handleClick">点我</button>
    </div>
</div>

可以看到就是在click后面加一个stop修饰符。Vue支持的修饰符很多,这里抛砖引玉,剩下的大家可以查查即可。

特别注意的知识点:方法的定义

对于事件回调的方法,必须定义在methods内部,比如:

<script>
    var vm = new Vue({
        el: '#app',
        data() {
            return {
            }
        },
        methods: {
            parentClick(){
                alert('父亲被点击了!!')
            },
            handleClick() {
                alert('button被点击了')
            }
        },
    });
</script>

这样定义的handleClick就会和实例绑定,一种可能的错误是:

<script>
  var vm = new Vue({
  el: '#app',
  data() {
    return {}
  },
  methods: {
    parentClick(){
      alert('父亲被点击了!!')
    }
  },
  handleClick() {
    alert('button被点击了')
  }
});
</script>

此时的handleClick属于实例的options的一个普通字段,没有任何别的意义,它不能被实例直接引用!!

总结

这篇概括介绍了事件的绑定方法,修饰符和方法的定义,有了这些知识基本够用了,后面我们需要这些知识辅助做实验。

标签: 回车事件

相关文章

多好的交互:enter、blur触发相同事件,为啥enter就走了2次

解决2次回调 <el-input v-model="input" placeholder="请输入内容" @keyup.enter.native="g...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。