繁体   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