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();
}
清理一下
当您不再对事件感兴趣时,通过执行以下操作删除子选项:
无支架事件()
希望这能为你指明正确的方向。
干杯!谢谢你的帮助!谢谢。