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 相关文章推荐
idTabs基于JQuery的根据URL参数选择Tab插件
Apr 11 Javascript
js判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
jquery提示效果实例分析
Nov 25 Javascript
jQuery下拉美化搜索表单效果代码分享
Aug 25 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
浅谈AngularJS中ng-class的使用方法
Nov 11 Javascript
基于bootstrap实现收缩导航条
Mar 17 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
vue.js打包之后可能会遇到的坑!
Jun 03 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
Jun 19 Javascript
如何在vue 中引入使用jquery
Nov 10 jQuery
如何自定义微信小程序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新手上路(十二)
2006/10/09 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python调用摄像头拍摄数据集
2019/06/01 Python
python hash每次调用结果不同的原因
2019/11/21 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python