每次我必须在不同的组件中使用可以随时间更改的变量时,我都会将该变量存储在服务中并将值包装在主题中,以便在调用下一个组件时每个组件寄存器都会发生变化。 但后来我看到教程提到使用主题时必须小心。他们执行以下操作:
// in some service
private subject$: Subject<any> = new Subject();
subjectAsObservable: Observable<any> = this.subject$.asObservable();
然后在组件中使用可观察对象,但随后我将无法调用 next
来发出新值。
按以下方式使用 subject 是否存在风险:
// 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$:
}
我不太了解安全风险。我该如何正确处理主题?
最佳答案
这是关于封装的。在较大的应用程序中,最好只有一个位置发送到共享流(主题),即服务中。
然后,其他组件就不会意外地调用该主题的 complete()
等。在服务中,只需提供一种方法即可发出(在您的示例中为emitNewValue)。不需要主题的 getter,因为使用 asObservable
公开主题可以为组件提供主题的只读副本,以便组件可以监听/订阅。
关于angular - 以这种方式在 Angular 中使用主题是否存在安全风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69427955/