【发布时间】:2018-06-04 01:13:13
【问题描述】:
我有一个Angular Component 和一个Output。当我 emit 和 event 到这个 output 时,将调用一个 async 函数(这个函数在组件之外)。
在component 内部,我想知道这个外部函数何时完成。有什么办法吗?
这是我的组件的一些代码:
@Output() action: EventEmitter<string>;
itemClicked(item) {
this.action.emit();
// When the function of the observer is done: this.hideMenu();
}
这是组件之外的代码:
<my-component (action)="getData()"></my-component>
getData() : Promise<any> {
...
}
有什么方法可以检测到组件内部的“getData”函数已经完成了吗?
在 AngularJS 中我可以这样做:
scope: {
action: '&'
}
...
scope.itemClicked = function(item) {
$q.when(item.action()).finally(function() {
scope.hideMenu();
});
};
编辑:
我正在考虑另一个受Ionic 的复习启发的解决方案。如果 emit() 调用将我的组件实例作为参数传递怎么办?这样,getData 函数可以执行以下操作:
getData(menu): Promise<any> {
...
menu.hideMenu();
}
您如何看待这个解决方案?如果您认为这是错误的,那么我想我会选择 Input。
【问题讨论】:
-
您可以为此进行输入。类似:
@Input() actionDone: boolean;并将其设置在您的父组件中并将其传递给您的my-component -
我会简单地为 menuHidden 定义一个输入属性:boolean trough a setter
-
我编辑了我的帖子以添加我刚刚想到的可能的解决方案。你能告诉我你是怎么想的吗?
标签: angular output observable angular-components eventemitter