当前位置: 首页 > news >正文

vue2中的.native修饰符和$listeners组件属性

一、.native修饰符

在vue2中,写在组件标签上的事件默认是自定义事件。例如:

<MyButton @click="handleClick" />

这里,写在MyButton组件上的click事件不会被触发,因为@click监听的是组件内的通过$emit触发的自定义事件,而不是原生的click事件

.native修饰符的作用则是将事件监听器直接绑定到组件的根元素上,用于监听组件上的原生DOM事件(如clickinput等)。例如:

// 父组件
<MyButton @click.native="handleClick" />//子组件
<template><button>Click Me</button>
</template>

这里,vue根据@click.native,会将事件监听器直接绑定到组件的根元素上,也就是说click事件会绑定到<button>上;且如果<button>上已经绑定了的click事件监听器会被覆盖

注意,.native修饰符只能监听组件根元素的原生事件,如果组件的根元素不是目标元素,事件不会被触发。例如:

<template><div><button>Click Me</button></div>
</template>

在这种情况下,@click.native会将事件绑定到<div>上,而不是<button>

注意:Vue3中,.native修饰符被移除,如需监听原生事件,可直接使用v-onemits选项显式声明事件

二、$listeners组件属性

在Vue2中,$listeners是一个特殊的组件属性,用于获取父组件通过v-on绑定在当前组件上的所有事件监听器;子组件中可以使用v-on="$listeners"将父组件的事件监听器绑定到的特定元素上。例如:

// 父组件 @click = v-on:click 
<MyButton @click="handleClick" />// 子组件
<template><div><button v-on="$listeners">Click Me</button></div>
</template>

这里的$listeners会将父组件的事件监听器绑定到<button>上,会覆盖掉<button>元素上原有的事件监听器

$listeners的结构

$listeners是一个对象,键是事件名,值是对应的回调函数。例如:

{click: function() { ... },input: function() { ... },customEvent: function() { ... }
}

$listeners的高级用法

  1. 结合v-on$listeners
    可以将$listeners与其他事件监听器结合使用
    <template><button v-on="{ ...$listeners, mouseover: handleMouseOver }">Click Me</button>
    </template>
    <script>
    export default {methods: {handleMouseOver() {console.log('Mouse over!');},},
    };
    </script>
    
  2. 过滤或修改事件监听器
    可以通过计算属性对$listeners进行过滤或修改
    <template><button v-on="filteredListeners">Click Me</button>
    </template>
    <script>
    export default {computed: {filteredListeners() {//过滤掉某些事件const listeners = { ...this.$listeners };delete listeners.customEvent;return listeners;}}
    }
    </script>
    

注意:Vue3中,$listeners被移除。事件监听器会被包含在$attrs中,可以通过v-bind="$attrs"传递

三、.native$listeners同时使用

// 父组件
<MyButton @click.native="handleNativeClick" @click="handleCustomClick" @touchstart="handleTouchStart"/>// 子组件
<template><div><button v-on="$listeners">Click Me</button></div>
</template>

这里,@click.native会将handleNativeClick事件绑定到<MyButton>的根元素,即<div>上;而v-on="$listeners"会将父组件的事件监听器(包括@click="handleCustomClick"@touchstart="handleTouchStart")绑定到<button>

ps: 为什么handleNativeClick事件不受$listeners影响呢?

$listeners只包含父组件通过v-on绑定的 .native 的事件监听器;换句话说,$listeners只会收集通过$emit触发的自定义事件

http://www.dtcms.com/a/565476.html

相关文章:

  • 网站建设情况报告范文wordpress首页怎么控制
  • 家政小程序拓展分析:从工具型产品到全链路服务生态的技术落地与商业破局
  • 中国十大门户网站排行定远建设小学投诉网站
  • 外贸网站制作哪家快wordpress删除站点
  • 检查部门网站建设网站建设的主题
  • 网站尾部一般怎么做室内设计公司排名榜
  • Spring Boot 集成 MQTT 实现消息发布与订阅
  • 【Linux系统编程】进程概念(二)进程的概念和基本操作
  • 建收费网站营销型网站建设风格设定包括哪些方面?
  • 【深度强化学习】#6 Soft Actor-Critic:最大熵与重参数化技巧
  • 教务管理系统源码
  • Demis Hassabis带领DeepMind告别纯科研时代:当AI4S成为新叙事,伦理考验仍在继续
  • 顺德网站建设域名网站的规划与建设_按时间顺序可以分为哪等五个阶段
  • 基于Python与Streamlit的救援物资调度双层规划模型实现方案
  • 高阶金融衍生品系统实战:TRS收益互换与场外期权的万亿级交易架构设计
  • 没有备案的网站可以用ip访问吗wifi小程序源码
  • idea远程debug 断点调试
  • Windows 10 停服下的国产化迁移:统信 UOS 工具核心技术深度解析
  • QML-Model-View
  • 电子电路原理第二十一章(稳压电源)
  • 存储连接方式与RAID重构解析,2018年5月第二题
  • 沈阳网站建设方案服务wordpress自定义背景颜色
  • 【个人成长笔记】在Linux系统中常见压缩与解压文件及文件夹命令(亲测有效)
  • 打印机驱动网能解决打印机驱动问题么?惠普打印机驱动故障问题修复
  • 通州网站建设服务七台河网站制作
  • idea配置代码注释模板
  • 前端文件上传终极指南:从原理到架构实践!
  • 【一问专栏】链表:数据世界的“寻宝游戏“——详解应用场景与独特优势
  • Linux 线程
  • 【Android项目】KMMV项目随笔