2017-08-29 16 views
1

我有一個服務文件,提醒系統Subjects,當設置值時,它也設置爲3秒後重置爲null使用setTimeout()方法。但在將changeDetection: ChangeDetectionStrategy.OnPush添加到app.component.ts後,似乎搞亂了所有的SetTimeout()方法。有沒有辦法在服務中使用ChangeDetectorRef是否可以將ChangeDetectorRef添加到Angular 4服務的構造函數中?

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); 
 
}

沒有ChangeDetectionStrategy enter image description here

+0

你想要這個任何具體的原因?可能還有其他方法 –

+0

我有一個服務,它擴展了服務端調用攔截目的'Http',並且在檢查後發現'Expression已經改變了。之前的值:'false'。當前值:不斷。有ChangeDetection策略'停止錯誤。這是我需要這個的唯一原因。 –

+0

這是一個工作,實際上你應該嘗試和消除服務調用中的這個錯誤,以獲得最好的結果@在角度獲取之前,你要改變什麼值 –

回答

3

我懷疑的問題是,setTimeout()不工作了。

問題在於,組件不會運行更改檢測,即使使用ApplicationRef.tick(),也會跳過未標記爲檢查的組件OnPush

我建議你在服務中使用的Observable和訂閱它的組件,然後使用可觀察到的,並在訂閱發出事件的組件調用ChangeDetectorRef.markForCheck()ChangeDetectorRef.detectChanges()

相關問題