国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

事件訂閱廣播組件

kumfo / 2068人閱讀

摘要:事件棧獲取事件對(duì)應(yīng)棧的索引事件類型對(duì)應(yīng)棧的索引不存在為已有事件類型處理?xiàng)1O(jiān)聽事件自定義事件類型事件處理函數(shù)已存在事件類型處理直接把相應(yīng)的處理函數(shù)入棧不存在事件,把對(duì)應(yīng)的事件處理入棧觸發(fā)對(duì)應(yīng)的事件自定義事件類型參數(shù)對(duì)象執(zhí)行對(duì)應(yīng)的事件自定義

export default class {
    // 事件棧
    eventStacks = [{
        eventType: "",
        handlers: []
    }];
    /**
     * 獲取事件對(duì)應(yīng)棧的索引
     *
     * @param {string} eventType 事件類型
     * @return {number} stackIndex 對(duì)應(yīng)棧的索引 不存在為-1
     */
    indexOf(eventType) {
        const eventStacks = this.eventStacks;
        // 已有事件類型處理?xiàng)?        let stackIndex = -1;
        for (let i = 0; i < eventStacks.length; i++) {
            const eventStack = eventStacks[i];
            if (eventStack.eventType === eventType) {
                stackIndex = i;
                break;
            }
        }
        return stackIndex;
    };
    /**
     * 監(jiān)聽事件
     *
     * @param {string} eventType 自定義事件類型
     * @param {Function} handler 事件處理函數(shù)
     */
    on(eventType, handler) {
        const index = this.indexOf(eventType);
        if (index >= 0) {
            // 已存在事件類型處理 直接把相應(yīng)的處理函數(shù)入棧
            this.eventStacks[index].handlers.push(handler);
        }
        else {
            // 不存在事件,把對(duì)應(yīng)的事件處理入棧
            const newEventStack = {
                eventType,
                handlers: [handler]
            };
            this.eventStacks.push(newEventStack);
        }
    };
    /**
     * 觸發(fā)對(duì)應(yīng)的事件
     *
     * @param {string} eventType 自定義事件類型
     * @param {Object} params 參數(shù)對(duì)象
     */
    emit(eventType, params = {}) {
        this.execEvent(eventType, params);
    };
    /**
     * 執(zhí)行對(duì)應(yīng)的事件
     *
     * @param {string} eventType 自定義事件類型
     * @param {Object} params 參數(shù)對(duì)象
     */
    execEvent(eventType, params = {}) {
        const index = this.indexOf(eventType);
        if (index < 0) {
            return;
        }
        const handlers = this.eventStacks[index].handlers;
        for (let i = 0; i < handlers.length; i++) {
            const currentHandler = handlers[i];
            if (currentHandler && typeof currentHandler === "function") {
                currentHandler(params);
            }
        }
    };
    /**
     * 解除對(duì)應(yīng)的事件
     *
     * @param {string} eventType 事件類型
     * @param {Function} handler 事件處理器 必須是引用傳進(jìn)來(lái) 使用對(duì)象引用相等判斷
     */
    offHandler(eventType, handler) {
        const index = this.indexOf(eventType);
        if (index >= 0 && this.eventStacks[index].handlers.length) {
            // 存在,并且已經(jīng)入棧
            const handlers = this.eventStacks[index].handlers;
            this.eventStacks[index].handlers = handlers.filter(currentHandler => {
                return currentHandler !== handler
            });
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/105511.html

相關(guān)文章

  • vue采用EventBus實(shí)現(xiàn)跨組件通信及注意事項(xiàng)

    摘要:掛載到添加文件第一個(gè)參數(shù)是事件對(duì)象,第二個(gè)參數(shù)是接收到消息信息,可以是任意類型事件訂閱監(jiān)聽當(dāng)前實(shí)例上的自定義事件。取消事件訂閱,移除自定義事件監(jiān)聽器。 EventBus EventBus是一種發(fā)布/訂閱事件設(shè)計(jì)模式的實(shí)踐。在vue中適用于跨組件簡(jiǎn)單通信,不適應(yīng)用于復(fù)雜場(chǎng)景多組件高頻率通信,類似購(gòu)物車等場(chǎng)景狀態(tài)管理建議采用vuex。 掛載EventBus到vue.prototype 添加...

    Panda 評(píng)論0 收藏0
  • EventBus使用方法詳解

    摘要:消息處理的方法也只能限定于和,分別代表四種線程模型。如果使用事件處理函數(shù)指定了線程模型為,那么無(wú)論事件在哪個(gè)線程發(fā)布,該事件處理函數(shù)都會(huì)在新建的子線程中執(zhí)行。分別使用上面四個(gè)方法訂閱同一事件,打印他們運(yùn)行所在的線程。 前言:EventBus出來(lái)已經(jīng)有一段時(shí)間了,github上面也有很多開源項(xiàng)目中使用了EventBus。所以抽空學(xué)習(xí)順便整理了一下。目前EventBus最新版本是3.0,所...

    huaixiaoz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<