vue组件添加事件@click.native操作
1,给vue组件绑定事件时候,必须加上native,否则会认为监听的是来自Item组件自定义的事件
2,等同于在子组件中:子组件内部处理click事件然后向外发送click事件:$emit("click".fn)
补充知识:vue——组件间(兄弟组件间)事件派发与接收
法一
main.js
在初始化vue之前,给data添加一个名为event的空vue对象
newVue({ render:h=>h(App), router, store, data:{ event:newVue() } }).$mount('#app')
组件一:
methods:{ addCart(e){ letpos={ 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){ letpos=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.1slinear,top.1scubic-bezier(.63,.02,.96,.56)` done() }, afterEnter(){ this.ball.show=false } },
法二
中央通信:leteventVue=newVue()
Amethods:{function(){eventVue.$emit('自定义事件','数据')}}
Bcreated(){eventVue.$on('A发送过来的事件名','函数')}
中央通信:
leteventVue=newVue()
兄弟组件A如下:
兄弟组件B如下:
{{btext}}
以上这篇vue组件添加事件@click.native操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。