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 相关文章推荐
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
JavaScript中的函数声明和函数表达式区别浅析
Mar 27 Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
探讨JavaScript语句的执行过程
Jan 28 Javascript
详解vue组件化开发-vuex状态管理库
Apr 10 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
详解JavaScript作用域和作用域链
Mar 19 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 Javascript
vue-cli3 热更新配置操作
Sep 18 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
windows平台中配置nginx+php环境
2015/12/06 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
Python读写Excel文件的实例
2013/11/01 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python分析网页上所有超链接的方法
2015/05/08 Python
python黑魔法之编码转换
2016/01/25 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
培训演讲稿范文
2014/01/12 职场文书
小学生演讲稿大全
2014/04/25 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
任命书格式范文
2015/09/22 职场文书