ts定义事件

本文探讨了如何在TypeScript中定义和处理事件,重点介绍了回调函数在事件触发时的角色,帮助理解如何在类型安全的环境下进行事件编程。

注册监听
initiallize(){

AppCommon.Messenger.on('cellselected', (cell) => { this.viewerControl_CellSelected(cell) });
}

回调函数:

    protected viewerControl_CellSelected(cell: MedViewerControlCell) {
        this.commandSender.sendCellOperation(null, 'SelectedCellChanged', cell.cellName);
    }

触发事件

    set isSelected(value) {
        if (this._isSelected == value) {
            return;
        }
        this._isSelected = value;
        if (value) {
            AppCommon.Messenger.trigger('cellselected', this);
        }
    }
export class Messenger {
    private static _callbacks: any = {};

    // 实现基本是从\node_modules\abp-web-resources\Abp\Framework\scripts\abp.js 中抽取

    static on(eventName: string, callback: (...args: any[]) => void): void {
        if (!this._callbacks[eventName]) {
            this._callbacks[eventName] = [];
        }

        this._callbacks[eventName].push(callback);
    }

    static off(eventName: string, callback: (...args: any[]) => void) : void {
        let callbacks = this._callbacks[eventName];
        if (!callbacks) {
            return;
        }

        let index = -1;
        for (let i = 0; i < callbacks.length; i++) {
            if (callbacks[i] === callback) {
                index = i;
                break;
            }
        }

        if (index < 0) {
            return;
        }

        this._callbacks[eventName].splice(index, 1);
    }

    static trigger(eventName: string, ...args: any[]): void {
        let callbacks = this._callbacks[eventName];
        if (!callbacks || !callbacks.length) {
            return;
        }

     
        for (let i = 0; i < callbacks.length; i++) {
            callbacks[i].apply(this, args);
        }

    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值