我有一个警告Subjects
系统的服务文件,在设置值时,它还使用setTimeout()
方法将自身设置为3秒后重置为null。但是在将changeDetection: ChangeDetectionStrategy.OnPush
添加到app.component.ts
后,它似乎搞砸了所有SetTimeout()
方法。有没有办法在服务中使用ChangeDetectorRef
?
storage.service.ts
private errorMsg: Subject < string > = new Subject();
private successMsg: Subject < string > = new Subject();
constructor() {}
setSuccessAlert(msg: string) {
this.successMsg.next(msg);
setTimeout(() => {
this.successMsg.next(null);
}, 3000);
}
&#13;
答案 0 :(得分:3)
我怀疑问题是setTimeout()
不再有效了。
问题是,即使使用ApplicationRef.tick()
,组件也不会运行更改检测,因为会跳过未标记为要检查的OnPush
组件。
我建议您在服务中使用Observable
并在组件中订阅它,然后使用observable和组件中的订阅调用ChangeDetectorRef.markForCheck()
或{ {1}}