Vue事件修饰符native、self示例详解


Posted in Javascript onJuly 09, 2019

事出有因

之前面试被问到的native和self相关问题,self我觉得自己应该能回答出来,可能被之前一小时的问题整懵逼了。尴尬~~
自己研究了一下,不足之处望补充,相互进步

native

修饰符native,有什么用

  1. native是原生事件(第一反应,当时没然后了...)

恶补一下

  1. native 一定是用于自定义组件,也就是自定义的html标签

结合代码说得明白

<body>
 <div id="app">
  <div class="box" >
   <Son @click='handler1'></Son>
  </div>
 </div>

</body>
<script>
 const Son = Vue.component('Son', {
  template: '<button @mouseover=handler2 class="box1">son</button>',
  methods: {
   handler2 (e) {
    
   }
  }
 })
 new Vue({
  el: "#app",
  components: {
   Son
  },
  data() {
   return {
    a: 123
   }
  },
  methods: {
   handler1 (e) {
    console.log('父级')
   }
  }
 })

</script>

注意点

  1. 当<Son @click='handler1'></Son>,子组件中的this.$listeners返回的是{click: ƒ},box1的dom上没有绑定click事件(可以打开F12查看),所以这个事件不是原生的click
  2. 当<Son @click.native='handler1'></Son>,子组件中的this.$listeners返回的是{},box1的dom上绑定了click事件(可以打开F12查看),所以这个事件是原生的click
  3. 当<Son @click.self='handler1'></Son>,子组件中的this.$listeners返回的是{click: ƒ},box1的dom上没有绑定click事件(可以打开F12查看),所以这个事件不是原生的click
  4. 子组件的this.$emit('eventTpye')是从this.$listeners返回值中查找的

为什么有时候组件点击事件不会生效

猜测

  • 子组件html标签没有定义click原生事件
  • 子组件没有执行this.$emit('click')

所以

直接.native将事件绑定到子组件html标签上,类似dom.addEventListener('click', handler)

self

作用

引用官方说明

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

结合代码说明

<body>
 <div id="app">
  <div class="box" @click.self='handler1'>
   <Son ></Son>
  </div>
 </div>

</body>
<script>
 const Son = Vue.component('Son', {
  template: '<button @click=handler2 class="box1">son</button>',
  methods: {
   handler2 (e) {
    console.log(e.target, e.currentTarget)
   }
  }
 })
 new Vue({
  el: "#app",
  components: {
   Son
  },
  data() {
   return {
    a: 123
   }
  },
  methods: {
   handler1 (e) {
    console.log(e.target, e.currentTarget)
   }
  }
 })
</script>

就是利用e.target和e.currentTarget,当添加self时,只有当两者相等时才会触发回调

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
编写兼容IE和FireFox的脚本
May 18 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
jQuery实现ichat在线客服插件
Dec 29 Javascript
JS模态窗口返回值兼容问题的完美解决方法
May 28 Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 Javascript
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
vue实现评价星星功能
Jun 30 Javascript
javascript实现图片轮换动作方法
Aug 07 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
JavaScript实现消消乐的源代码
Jan 12 Javascript
如何自定义微信小程序tabbar上边框的颜色
Jul 09 #Javascript
微信小程序wx.request拦截器使用详解
Jul 09 #Javascript
javascript实现图片轮播代码
Jul 09 #Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 #Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 #Javascript
Vue 实现前端权限控制的示例代码
Jul 09 #Javascript
微信小程序文章详情页跳转案例详解
Jul 09 #Javascript
You might like
基于php伪静态的实现详细介绍
2013/04/28 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
div层的移动及性能优化
2010/11/16 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python打开网页和暂停实例
2014/09/30 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
如何用Python徒手写线性回归
2021/01/25 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
一些.net面试题
2014/10/06 面试题
公务员个人考察材料
2014/12/23 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL