• Vue中的方法和事件绑定


    在Vue对象中方法写在methods属性中,供事件或者其它方法使用。

    在methods中定义方法:

    1. new Vue({
    2. el:"#box",
    3. data:{},
    4. methods: {
    5. //定义式
    6. fn1:function(){},
    7. //箭头函数的写法
    8. fn2:()=>{},
    9. //es6写语法,在对象里写方法
    10. fn3(){}
    11. },
    12. })

    定义的方法供事件使用,首先要给标签绑定事件。

    事件绑定

    事件绑定的方法有两种:

    1、v-on:事件类型(前面学习过的鼠标事件、键盘事件等),如v-on:click=""   

    2、语法糖,v-on:简写为@,如@click=""

    我们用两种方法分别来写一个点击事件

    1. <div id="box">
    2. <button v-on:click="fn1">标准形式button>
    3. <button @click="fn1">语法糖button>
    4. div>
    5. <script>
    6. new Vue({
    7. el:"#box",
    8. data:{},
    9. methods: {
    10. //定义式
    11. fn1:function(){
    12. console.log(666);
    13. },
    14. }
    15. })
    16. script>

    点击两个按钮都会在控制台打印666

    一个标签同时也可以绑定多个事件,如:

      

    这里事件后跟方法名可以加()也可以不加,这也是与我们以前学习DOM操作阶段行内绑定的区别,在之前行内绑定函数名必须加()。

    如果想要给一个标签加两个相同的事件类型,在以前我们是通过addEventListener监听器添加,如果用属性绑定会被覆盖。在Vue中,如果我们直接在行内写两个相同的事件类型也是会被覆盖,如:

    1. "box">
    2. <button @click="fn3" @click="fn4">绑定了两个点击事件button>
  • <script>
  • document.body.addEventListener
  • new Vue({
  • el:"#box",
  • data:{},
  • methods: {
  • fn3(){
  • console.log(111);
  • },
  • fn4(){
  • console.log(222);
  • }
  • },
  • })
  • script>
  • 绑定了两个点击事件,但是控制台打印的时候只会打印111,如果我们想要实现通过打印222,那么我们只需要将fn3,fn4的调用同时装在一个方法fn5内,绑定事件=“fn5”

    代码展示:

    1. "box">
    2. <button @click="fn5">改进绑定了两个点击事件button>
  • <script>
  • document.body.addEventListener
  • new Vue({
  • el:"#box",
  • data:{},
  • methods: {
  • fn3(){
  • console.log(111);
  • },
  • fn4(){
  • console.log(222);
  • },
  • fn5(){
  • this.fn3()
  • this.fn4()
  • }
  • },
  • })
  • script>
  • 注意:fn5方法内要用this来调用fn3和fn4,因为fn3和fn4生效以后就是Vue对象的方法了,在Vue中this就代表Vue对象。

    只要是事件就存在事件链,会涉及捕获和冒泡,目标元素被触发时,其事件链上绑定的事件也会被触发。

    写一个例子感受一下:

    1. <div id="box1">
    2. <div class="box11" @click="fn1">1
    3. <div class="box12" v-on:click="fn2">2
    4. <div class="box13" @click="fn3">3div>
    5. div>
    6. div>
    7. div>
    8. <script>
    9. new Vue({
    10. el:"#box1",
    11. data:{
    12. },
    13. methods: {
    14. fn1(){
    15. console.log("box11");
    16. },
    17. fn2(){
    18. console.log("box12");
    19. },
    20. fn3(){
    21. console.log("box13");
    22. }
    23. },
    24. })
    25. script>

    点击box13盒子,目标元素为box13,当事件触发后往上冒泡依次执行box12的事件,box11的事件,事件默认都是在冒泡阶段触发。效果:

     我们也可以打印一下事件对象,看一下它的事件链,在绑定事件的方法传入$event,

    如 @click="fn1($event)",在methods方法内fn1方法接收,并打印,点击box13的path路径即为我们向上冒泡的路径,在这条路径上有事件的结点会依次触发。

     

    既然有冒泡那就肯定有阻止冒泡,防止一些不必要的操作。

    在vue中阻止冒泡,用事件修饰符.stop写在绑定事件后,如: @click.stop="fn1",该元素就不会再向上冒泡。

    其它事件修饰符

    .prevent 阻止默认事件

    .capture 添加事件侦听器时让事件在捕获阶段触发

    .self 其他元素的事件触发时 事件链经过它,无论是捕获还是冒泡阶段都不会触发它的事件,只有它自己是精准对象才会触发事件, 虽然它自己不会被别人影响,但是它自己的事件触发的时候还是会生成事件链经过其他元素,并不阻止继续冒泡到其他元素

    .once 事件只触发一次,触发完之后,事件就解绑

    其中多修饰符一起使用:连点,例如@click.stop.prevent="fn1",表示即阻止事件冒泡也阻止默认事件冒泡(a标签就是默认事件)。

    补充知识点

    methods方法中的this

    1. 方法中的this代表vm对象,即就是new Vue()创建的对象

    2、方法和ES5的函数中的this是vm对象

    3、ES6的箭头函数中的this就不是vm,因为箭头函数中的this跟谁调用无关,指向上一个不是箭头函数的函数的this==>因此推荐事件的函数采用ES6的对象的方法写方法 这种写法不推荐。

  • 相关阅读:
    内网渗透神器CobaltStrike之钓鱼攻击(六)
    自己动手写一个番茄小助手
    ARP防御篇-如何揪出“内鬼”并“优雅的还手”
    Solidity 小白教程:5. 变量数据存储和作用域 storage_memory_calldata
    毕业设计 基于51单片机老人防跌倒GSM短信报警系统
    共识算法 Raft
    Win11如何格式化硬盘?
    快速搭建React TypeScript项目
    Linux网络编程- inet_pton()函数
    自动驾驶专题介绍 —— 车辆尺寸
  • 原文地址:https://blog.csdn.net/m0_59345890/article/details/126598429