是否可以将`ChangeDetectorRef`添加到Angular 4服务的构造函数中?

时间:2017-08-29 11:46:59

标签: angular typescript angular2-services

我有一个警告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;
&#13;
&#13;

没有ChangeDetectionStrategy enter image description here

1 个答案:

答案 0 :(得分:3)

我怀疑问题是setTimeout()不再有效了。

问题是,即使使用ApplicationRef.tick(),组件也不会运行更改检测,因为会跳过未标记为要检查的OnPush组件。

我建议您在服务中使用Observable并在组件中订阅它,然后使用observable和组件中的订阅调用ChangeDetectorRef.markForCheck()或{ {1}}