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 相关文章推荐
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
简述Jquery与DOM对象
Jul 10 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
JavaScript定义函数的三种实现方法
Sep 23 Javascript
详解如何让Express支持async/await
Oct 09 Javascript
js获取form表单中name属性的值
Feb 27 Javascript
vue实现标签云效果的方法详解
Aug 28 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
解决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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
获取远程文件大小的php函数
2010/01/11 PHP
PHP 事件机制(2)
2011/03/23 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
laravel安装和配置教程
2014/10/29 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
php实现的xml操作类
2016/01/15 PHP
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
Python中生成Epoch的方法
2017/04/26 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
上课迟到检讨书100字
2014/01/11 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
教育科研先进个人材料
2014/01/26 职场文书
行政部岗位职责范本
2014/03/13 职场文书
cf搞笑广告词
2014/03/14 职场文书
新闻人物通讯稿
2014/10/09 职场文书
批评与自我批评总结
2014/10/17 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
项目经理助理岗位职责
2015/04/13 职场文书