vue组件添加事件@click.native操作


Posted in Javascript onOctober 30, 2020

1,给vue组件绑定事件时候,必须加上native ,否则会认为监听的是来自Item组件自定义的事件

2,等同于在子组件中: 子组件内部处理click事件然后向外发送click事件:$emit("click".fn)

<Item @click.native = "shijian()"></Item>

补充知识:vue——组件间(兄弟组件间)事件派发与接收

法一

main.js

在初始化vue之前,给 data 添加一个名为 event 的空vue对象

new Vue({
 render: h => h(App),
 router,
 store,
 data: {
  event: new Vue()
 }
}).$mount('#app')

组件一:

methods: {
   addCart (e) {
    let pos = {
     x: parseInt(e.target.getBoundingClientRect().x + 4),
     y: parseInt(e.target.getBoundingClientRect().y + 4)
    }
    this.$root.event.$emit('ballPosition', pos)
   }
  }

组件二:

created () {
   this.$root.event.$on('ballPosition', (target) => {
    this._initBall(target)
   })
  },  
 methods: {
   _initBall (target) {
    this.ball = true
    this.ballMassage = target
   }
 }

完整案例:

抛物小球动画:

created () {
   this.$root.event.$on('ballPosition', (target) => {
    this._initBall(target)
   })
  },
  methods: {
   _initBall (el) {
    this.ball.show = true
    this.ball.el = el
   },
   beforeEnter (el) {
    let pos = this.ball.el.target.getBoundingClientRect()
    el.style.top = `${pos.y}px`
    el.style.left = `${pos.x}px`
   },
   enter (el, done) {
    // 触发动画重绘
    el.offsetHeight
    let [x, y] = [parseInt(this.$refs.cart.getBoundingClientRect().x + 4), parseInt(this.$refs.cart.getBoundingClientRect().y + 8)]
    el.style.top = `${y}px`
    el.style.left = `${x}px`
    el.style.transition = `left .1s linear, top .1s cubic-bezier(.63,.02,.96,.56)`
    done()
   },
   afterEnter () {
    this.ball.show = false
   }
  },

法二

中央通信: let eventVue = new Vue()

A methods:{function(){eventVue.$emit('自定义事件','数据')}}

B created(){eventVue.$on('A 发送过来的事件名','函数')}

中央通信:

let eventVue = new Vue()

兄弟组件 A 如下:

<template>
   <div class="components-a">
      <button @click="abtn">A按钮</button>
   </div>
</template>
<script>
import eventVue from '../../js/event.js'
export default {
   name: 'app',
   data () {
    return {
        ‘msg':"我是组件A"
    }
   },
   methods:{
      abtn:function(){
          eventVue.$emit("myFun",this.msg)  //$emit这个方法会触发一个事件
      }
   }
}
</script>

兄弟组件 B 如下:

<template>
   <div class="components-a">
     <div>{{btext}}</div>
   </div>
</template>
<script>
import eventVue from '../../js/event.js'
export default {
  name: 'app',
  data () {
    return {
      'btext':"我是B组件内容"
    }
  },
  created:function(){
    this.bbtn();
  },
  methods:{
    bbtn:function(){
      eventVue.$on("myFun",(message)=>{  //这里最好用箭头函数,不然this指向有问题
         this.btext = message   
      })
    }
  }
}
</script>

以上这篇vue组件添加事件@click.native操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ASP Json Parser修正版
Dec 06 Javascript
jQuery实现动画效果的简单实例
Jan 27 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
浅谈jquery页面初始化的4种方式
Nov 27 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
使用AngularJS2中的指令实现按钮的切换效果
Mar 27 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 Javascript
详解JavaScript数据类型和判断方法
Sep 04 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 #Javascript
详解 javascript对象创建模式
Oct 30 #Javascript
ES6中的Javascript解构的实现
Oct 30 #Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 #Javascript
Echarts.js无法引入问题解决方案
Oct 30 #Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
Oct 30 #Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 #Javascript
You might like
收集的DedeCMS一些使用经验
2007/03/17 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
Javascript图像处理思路及实现代码
2012/12/25 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Python骚操作之动态定义函数
2019/03/26 Python
Python jieba库分词模式实例用法
2021/01/13 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
大学竞选班长演讲稿
2014/04/24 职场文书
财务部会计岗位职责
2015/02/03 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
入党自传范文2015
2015/06/26 职场文书
入队仪式主持词
2015/07/04 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python