美文网首页
Vue 组件之间通信

Vue 组件之间通信

作者: 洪锦一 | 来源:发表于2022-03-19 08:54 被阅读0次

    父给子传值 prop

    1.在父组件里面,给子组件标签添加要传的值
        <HelloWorld  name="ls" :age="11" />
    
    2.子组件听过prop接收(数组方式,或对象方式)
        props: ["name",'age']
        
        props:{
            name: {
                type: String,
                required: true,
            },
            age:{
                type: Number,
                default:11
            }
        }
    

    子给父 $emit ref 自定义事件

    1.子组件发射事件
    this.$emit("delObj", 参数);
    
    2.在父组件接收
    <Head @delObj="addTodo" />
    
    function addTodo(参数){}
    

    通过 ref

    <Head ref="handCom" />
    
    this.$refs.handCom.$on("delObj",()=>{})
    

    事件总线:

    一种组件间通信方式,适用于任意组件间通信
    
    1. 在main.js 安装
    
        第一种方式:
        new Vue({
            render: h => h(App),
            beforeCreate() {
                Vue.prototype.$bus = this
            },
        }).$mount('#app')
    
        第二种方式:
        Vue.prototype.$bus = new Vue()  main.js
    
    2.监听事件
        this.$bus.$on('sendBus',($event) => {})
    
    3.发布事件
        this.$bus.$emit('sendBus', { ... pass some event data ...});
    
    4.页面销毁解绑事件(解绑自定义事件,在监听页面解绑)
        beforeDestroy() {
            this.$bus.off("sendBus");
        },
    

    消息订阅与发布

    一种组件间通信方式,适用于任意组件间通信
    
    1.安装
        npm i pubsub-js --> 消息订阅与发布所需库
    
    2.在需要使用消息订阅与发布的地方使用订阅消息的组件(接收数据的组件)
        import pubsub from "pubsub-js"
    
    3. 页面挂载完成订阅消息
        mounted() {
            // 订阅消息 msg(消息名字), data(参数)
            this.pubId = pubsub.subscribe("hello", function (msg, data) {
            console.log("有人发布消息了。", msg, data);
            });
        },
    
    4. 发布消息
        pubsub.publish("hello", 666);
    
    5.卸载之前取消订阅
        beforeDestroy() {
            // 根据id取消订阅
            pubsub.unsubscribe(this.pubId);
        },
    

    相关文章

      网友评论

          本文标题:Vue 组件之间通信

          本文链接:https://www.haomeiwen.com/subject/ztovdrtx.html