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

简介: 1.封装的方法:ZJeventCenter.js

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
            });
        }

4ded3558c98f4404a966006b54dd9573.png

相关文章
|
5月前
|
小程序 前端开发 JavaScript
微信小程序(二十二)子组件调用父组件方法,父组件调用子组件方法
制作了一个自定义组件,底部弹出菜单。 显示这个菜单的时候,首先,父组件需要调用子组件的方法,显示子组件。 点击子组件的菜单,需要调用父组件的方法进行逻辑处理。
177 0
|
7天前
|
前端开发 JavaScript 开发者
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(二)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
16 0
|
7天前
|
JavaScript 前端开发 算法
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(一)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
11 0
|
4月前
|
小程序
子组件调用父组件的方法并传递数据
子组件调用父组件的方法并传递数据
|
5月前
|
JavaScript
vue父组件调用子组件方法
vue父组件调用子组件方法
54 0
|
6月前
|
JavaScript
vue子组件调用父组件方法
vue子组件调用父组件方法
63 0
|
10月前
|
JavaScript
【Vue】子组件调用父组件的方法——案例
【Vue】子组件调用父组件的方法——案例
127 0
|
11月前
|
人工智能 JavaScript
VUE中父组件如何调用子组件的方法
VUE中父组件如何调用子组件的方法
父组件访问子组件的方法或参数 (子组件暴漏出方法defineExpose)
父组件访问子组件的方法或参数 (子组件暴漏出方法defineExpose)
132 0