簡體   English   中英

這樣使用 Angular 中的 subject 有沒有安全隱患?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM