vue 的$emit

在vue中我们常常会用到组件嵌套,对于新手来说,父子组件通信会经常困扰我们,不懂还在网站找例子?看完这篇你就会用了。

//父级
new Vue({
    el:"#app",
    data:{
        aaa:111,
        bbb:222
    },
    methods:{
        dosometing:function(msg){
            console.log(msg)
        }
    }
})
//组件:
Vue.component('child',{
        props:['aaa'],
        template:'<input type='text'>'
    });
//调用子组件
  <child @change="dosometing" :aaa='111' :bbb='222'></child>

渲染出来的结果,没有被"props"接受的数据会直接绑到组件元素上

<input type="text" value="222">

但当在输入框输入的时候dosometing并未执行,说明绑定的change事件并没有绑上。如果用$emit

Vue.component('child',{
        props:['aaa'],
        template:"<input @click='childfun' type='text'>",
        methods:{
            childfun:function(){
                this.$emit('change');//触发事件
            }
        }
    });
//调用子组件
  <child @change="doSomeTing" :aaa='111' :bbb='222'></child>

好搞定,当我们在childfun方法内输出this.change的时候,结果为undefined,说明change方法并没有挂载在组件实例下边。$emit相当于jq中的trigger事件,只不过是用子组件来触发父组件的方法。所以里面的this是父组件。

不过为了触发父级的事件我们并不是只有$emit可以实现

1、可以通过$parent来直接触发父级的事件

Vue.component('child',{
        props:['aaa'],
        template:"<input @click='childfun' type='text'>",
        methods:{
            childfun:function(){
               this.$parent.change1(1111)
    };//触发父级事件
            }
        }
    });

这种方法可以和$emit达到相同的效果
2.通过props以参数的形式把方法传过来

//父级
new Vue({
    el:"#app",
    data:{
        aaa:111,
        bbb:222
    },
    methods:{
        dosometing:function(msg){
            console.log(msg)
        }
    }
})
//组件:
Vue.component('child',{
        props:['aaa'],
        template:'<input type='text'>',
         childfun:function(){
                this.change1(1111)
    }
    });
//调用子组件
  <child :change="dosometing" :aaa='111' :bbb='222'></child>

当然这样是执行了想要执行的方法,但是因为方法挂载到了子组件上所以方法内的this指向的是子组件,这时可以用vm = new Vue({}) 用vm来代替this,达到操控父组件数据的目的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值