[Vue]非父子组件传值(bus/总线/观察者模式/发布订阅模式)

博客介绍了在Vue原型中挂载Vue实例的方法,可通过this.bus.$emit向外触发事件和传递参数,在生命周期函数mounted中,用this.bus.$on做后续逻辑处理,还给出了点击使另一元素改变名字的Demo示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心:

  1. 在vue原型中挂载vue实例
  2. 通过this.bus.$emit('事件名', '参数')向外触发事件和传递参数
  3. 在生命周期函数mounted中,通过this.bus.$on('传递出来的事件名, callback')来做后续逻辑处理

Demo(实现点击,使得另外一个也改变成自己的名字)

<div id="app">
        <child content="吴旭飞"></child>
        <child content="左晶晶"></child>
</div>
<script>
    Vue.prototype.bus = new Vue() // 在vue原型中挂载vue实例
    Vue.component('child', {
        data () {
            return {
                selfcontent: this.content
            }
        },
        props: {
            content: {
                type: String,
            }
        },
        template: '<div @click="handleClick">{{selfcontent}}</div>',
        methods: {
            handleClick () {
                this.bus.$emit('change', this.selfcontent) // 通过this.bus.$emit('事件名', '参数')向外触发事件和传递参数
            }
        },
        mounted() { // 3. 在生命周期函数mounted中,通过this.bus.$on('传递出来的事件名, callback')来做后续逻辑处理
            this.bus.$on('change', data => {
                this.selfcontent = data
            })
        },
    })
    var app = new Vue ({
        el: '#app'
    })
</script>
复制代码

转载于:https://juejin.im/post/5cd0284cf265da03a85ad4b9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值