需求:组件A可以直接调用组件B的方法

1.封装的方法:

ZJeventCenter.js

!(function (window) {
    if ("ZJeventCenter" in window && window.ZJeventCenter) return;
    window.ZJeventCenter = {
        list: [],
        on (event, fn) {
            (this.list[event] || (this.list[event] = [])).push(fn);
            return this;
        },
        once (event, fn) {
            const _this = this;
            function on () {
                _this.off(event, on);
                fn.apply(_this, arguments);
            }
            on.fn = fn;
            this.on(event, on);
            return this;
        },
        off (event, fn) {
            let fns = this.list[event];
            if (!fns) return false;
            if (!fn) {
                fns && (fns.length = 0);
            } else {
                let cb = null;
                for (let i = 0; i < fns.length; i++) {
                    cb = fn[i];
                    if (cb === fn || cb.fn === fn) {
                        fns.splice(i, 1);
                        break;
                    }
                }
            }
            return;
        },
        emit () {
            let event = [].shift.call(arguments);
            let fns = [...this.list[event]];
            if (!fns || fns.length === 0) {
                return false;
            }
            fns.forEach((fn) => {
                fn.apply(this, arguments);
            });
            return this;
        },
    };
})(window);

2.在App.vue中引入

import "@/utils/ZJeventCenter.js"

3.在HomeView.vue页面注册方法

mounted () {
        // 注册num方法
        window.ZJeventCenter.on('num', this.num)
    },
    methods: {
        // mum方法
        num (data) {
            let num1 = data.a + data.b;
            console.log(num1);
        }
    }

4.在AboutView.vue页面使用方法

<button @click="fn">a+b</button>
fn () {
            window.ZJeventCenter.emit("num", {
                a: 1,
                b: 1
            });
            
        }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug天选之子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值