vue组件iview中message实现不太理解

发布于 2022-09-06 04:05:45 字数 337 浏览 14 评论 0

问题

在看iview源码中message的实现,不是很理解没处下手,有大牛能疏导一下吗?

如:

this.$Message.success('This is a success tip');

这个的实现过程

iview官网
iview github

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千仐 2022-09-13 04:05:45

你不理解哪块?

整体实现是有一个v-for所有notice类的组件。你每调用一次就往里push一个。


1.success->message

// 几种方法最终都是调用message
success (options) {
    return this.message('success', options);
}

2.message-->notice

message(type, options){
        if (typeof options === 'string') {
            options = {
                content: options
            };
        }
        return notice(options.content, options.duration, type, options.onClose, options.closable);
    }

3.noitice-->getMessageInstance

function notice (content = '', duration = defaults.duration, type, onClose = function () {}, closable = false) {
    //...
    // 这个应该是拿实例
    let instance = getMessageInstance()
    // 这个应该是真正append到页面上
    instance.notice({
        
    });

    // 用于手动消除,返回值不用管
    return (function () {
    })();
}

4.getMessageInstance-->Notification.newInstance

function getMessageInstance () {
    // 复用?
    messageInstance = messageInstance || Notification.newInstance({
    });
    return messageInstance;
}

5.iview/src/components/base/notification/index.js

Notification.newInstance = properties => {
    const _props = properties || {};
    // 创建了一个统一v-for所有notice类的组件
    const Instance = new Vue({
        data: _props,
        render (h) {
            return h(Notification, {
                props: _props
            });
        }
    });

    const component = Instance.$mount();
    document.body.appendChild(component.$el);
    return {
        // 3里有调用notice()的一步
        notice (noticeProps) {
            // 调了组件的add,向v-for队列里加了一个,去notification.vue能看到
            notification.add(noticeProps);
        }
    };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文