【发布时间】:2019-03-18 12:29:25
【问题描述】:
我将asyncPipe 与*ngIf 装饰器一起使用,该装饰器会自动订阅/取消订阅在<ng-container>...</ng-container> 中返回object 的Observable。
到目前为止一切顺利,但在ng-container 标记内,我想将object 作为参数传递给方法doSomething(object)。
问题是方法运行了5-8次?
HTML 模板
<ng-container *ngIf="(user$ | async) as user">
{{ doSomething(user) }} <-- method executes multiple times
</ng-container
打字稿文件
class Component implements OnInit {
user: Observable<User>;
constructor() {}
ngOnInit() {
this.user$ = this.userService.getUser(id);
}
checkConfigs(object) {
console.log(object);
}
}
我已经测试过问题是否是 Observable 执行了多次,但它只运行了一次。然后认为ng-container 中的代码是问题所在,但这也运行一次。
这个问题与this 不同,因为我不是在问它是否可取,而是在问如何解决这个问题。在实践中,这应该有效。但是由于 Angulars changeDetection 架构,它不能像预期的那样与 Observables 一起工作,甚至在这篇文章中指出 things you didn't know about the AsyncPipe 如何使用 changeDetection: ChangeDetectionStrategy.OnPush 解决它。
【问题讨论】:
-
不,这个问题不涉及我的用例,但很高兴知道。
-
链接问题的答案回答了您的问题:模板中的方法将在每次角度运行更改检测时运行。
-
@Arikael,如前所述,很高兴知道但没有解决问题。该线程的解决方案确实如此,所以请停止将这个解决方案强加给我。
标签: javascript angular typescript asynchronous