[英]Are there any security risks using subjects in Angular this way?
每次我必須在不同的組件中使用一個可以隨時間更改的變量時,我將該變量存儲在服務中並將值包裝在 Subject 中,以便在調用 next 時每個組件寄存器都會更改。 但是后來我看到教程提到在使用主題時必須小心。 他們執行以下操作:
// in some service
private subject$: Subject<any> = new Subject();
subjectAsObservable: Observable<any> = this.subject$.asObservable();
然后在組件中使用可觀察對象,但我將無法調用next
來發出新值。
以下方式使用主題時是否有任何風險:
// in some service
subject$: Subject<any> = new Subject();
然后在組件中訂閱該主題,如果組件對變量進行更改,則調用next
並且訂閱該主題的每個組件都將獲得新值。
以下實現是否與上面的實現不同(更“安全”):
private subject$: Subject<any> = new Subject();
emitNewValue(value: any): void {
this.subject$.next(value);
}
getSubject(): Subject<any> {
return this.subject$:
}
我不太了解安全風險。 我將如何正確處理主題?
這是關於封裝。 在較大的應用程序中,最好只有一個地方可以發送到共享的 stream(主題),它位於服務中。
然后沒有其他組件可以,例如,意外調用complete()
主題。 在服務中,只需提供一種方法即可發出(在您的示例中為 emitNewValue)。 不需要主題的吸氣劑,因為使用asObservable
公開主題為組件提供了主題的只讀副本,它們可以收聽/訂閱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.