需求:组件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

相关文章
|
11月前
|
小程序 前端开发 JavaScript
微信小程序(二十二)子组件调用父组件方法,父组件调用子组件方法
制作了一个自定义组件,底部弹出菜单。 显示这个菜单的时候,首先,父组件需要调用子组件的方法,显示子组件。 点击子组件的菜单,需要调用父组件的方法进行逻辑处理。
296 0
|
6月前
|
JavaScript
在父组件中使用子组件时,如何保证子组件的实例在父组件的生命周期中得到正确的更新?
在父组件中使用子组件时,如何保证子组件的实例在父组件的生命周期中得到正确的更新?
35 2
|
6月前
|
JavaScript
Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用
Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用
Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用
|
5月前
|
JavaScript
子组件向父组件传参的方式?
子组件向父组件传参的方式?
92 0
|
6月前
|
小程序
子组件调用父组件的方法并传递数据
子组件调用父组件的方法并传递数据
|
11月前
|
JavaScript
vue父组件调用子组件方法
vue父组件调用子组件方法
80 0
|
JavaScript
vue子组件调用父组件方法
vue子组件调用父组件方法
97 0
|
JavaScript
【Vue】子组件调用父组件的方法——案例
【Vue】子组件调用父组件的方法——案例
149 0