Javascript 发出事件/订阅AngularJs TypeScript控制器中的TypeScript方法(常规TypeScript文件)

Javascript 发出事件/订阅AngularJs TypeScript控制器中的TypeScript方法(常规TypeScript文件),javascript,angularjs,typescript,Javascript,Angularjs,Typescript,我如何在属于我们的AngularJs TypeScript项目的常规TypeScript文件中订阅/或收听事件/方法 上下文:我们有一个加载程序,progressBar.ts,它具有一个方法,updateGlobalProgressBar,它通过导出属性公开,该属性跟踪加载的百分比。另一方面,我有一个控制器,功能区控制器,它设置功能区视图的某些属性 是否有办法订阅或收听我的ribbonController中的updateGlobalProgressBar方法,以了解加载程序何时达到100% 请注

我如何在属于我们的
AngularJs TypeScript
项目的常规
TypeScript
文件中订阅/或收听
事件/方法

上下文:我们有一个加载程序,
progressBar.ts
,它具有一个
方法
updateGlobalProgressBar
,它通过
导出属性
公开,该属性跟踪加载的百分比。另一方面,我有一个
控制器
功能区控制器
,它设置功能区
视图
的某些
属性

是否有办法订阅或收听我的
ribbonController
中的
updateGlobalProgressBar
方法,以了解加载程序何时达到100%

请注意
progressBar.ts
不是
AngularJs服务
控制器
,而是一个普通的
类型脚本
文件,没有任何
注入
,没有
构造函数方法

我尝试了一个
do-while循环
,但这创建了一个无休止的
循环

do {
    this._scope.loaderHasLoaded = utilities.loadingComplete();
}
while (this._scope.loaderHasLoaded === false);
我尝试了一个
if循环
,但这只触发了一次,显然不是在正确的时间:

if (utilities.loadingComplete()) {
    this._scope.loaderHasLoaded = true;
} else {
    this._scope.loaderHasLoaded = false;
}
我需要以某种方式倾听
变量
progressBar.ts
中的内容,以便在加载完成时通知我。我编写了以下helper
方法
,当从
updateGlobalProgressBar
中加载完成时将调用该方法:

export function loadingComplete(): boolean {
    if (this.loadComplete === true) {
        return true
    } else {
        return false;
    }
}
我可以调用这个
方法
等,但不知道如何订阅它


任何帮助都将不胜感激

我会尽力帮你的

方法:

  • 在progressBar.ts中创建事件发射器,在进度条达到100%状态时发出事件
  • 通过导出属性公开事件
  • 订阅/收听活动并执行必要的操作
  • 触发事件
  • 清理
  • 现在,我将用一些代码详细说明:

  • 在progressBar.ts中创建事件发射器,在进度条达到100%状态时发出事件

    基本事件发射器类和实例创建:

    类EventEmitter{

            listeners=[];
    
            register(callback) {
    
                var _listeners = this.listeners
    
                _listeners.push(callback);
    
                return function() {
                    _listeners.splice(_listeners.indexOf(callback), 1);
                }
    
            }
    
            trigger() {
                var args =arguments;
                this.listeners.forEach(callback => callback.apply(null, args));
            }
        }
    
    
        const onProgressBarComplete = new EventEmitter();
    
  • 通过导出属性公开事件

  • 出口完成

  • 订阅/收听活动并执行必要的操作

    import {onProgressBarComplete} from './progressBar';
    
    var unListenToEvent = onProgressBarComplete.register(function() {
        // code in response to event
    });
    
  • 触发器事件:在updateGlobalProgressBar方法中添加条件

    if(progress === 100) { //This condition is up to you
        onProgressBarComplete.trigger();
    }
  • 清理一下

    当您不再对事件感兴趣时,通过执行以下操作删除子选项:

    无支架事件()

  • 希望这能为你指明正确的方向。
    干杯!

    谢谢你的帮助!谢谢。