Hor*_*ley 5 javascript rxjs typescript rxjs6
什么时候asObservable()需要一个主题(例如 BehaviorSubject)来获得该主题的可观察性?主题 isself 也可以转换为 Observable。
name1$和之间的技术区别是name2$什么?name1$或name2$)?import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs';
export class Person {
private nameSubject: BehaviorSubject<string> = new BehaviorSubject<string>('lorem');
public get name1$(): Observable<string> {
return this.nameSubject.asObservable();
}
public get name2$(): Observable<string> {
return this.nameSubject;
}
public setName(value: string): void {
this.nameSubject.next(value);
}
}
Run Code Online (Sandbox Code Playgroud)
提前感谢您的回答!
asObservable()创建一个新的 Observable,它包装Subject,因此包装的 observable 没有next()方法,以及complete()和error()。我认为这在 JavaScript 中更有意义,因为返回的对象不受其类型的限制。但在 TypeScript 中,你可以通过缩小类型来隐藏这些方法,在大多数情况下这应该足够了。您只需告知Observable返回了 an,API 的用户并不知道它是Subject; 当然它可以被转换回Subject,但这不是 API 应该使用的方式。
另请参阅:何时在 rxjs 中使用 asObservable()?
一般情况下,建议asObservable()仅在 JavaScript 中使用 RxJS 时使用。使用 TypeScript,你可以只使用类型转换,它不会让你打电话next()等等。
private nameSubject: BehaviorSubject<string> = new BehaviorSubject<string>('lorem');
public nameSubject$: Observable<string> = this.nameSubject;
Run Code Online (Sandbox Code Playgroud)
这是官方推荐的在 TypeScript 中将 Subjects 转换为 Observables 的方法。
有关详细信息,请参阅https://github.com/ReactiveX/rxjs/pull/2408#issuecomment-282077506。
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |