Javascript 仅为订阅返回主题
我的问题是关于在不允许接收者对主题执行.next()操作的情况下返回对主题的引用 例如,我有一个服务,它包含一个主题,可以触发该主题的新事件Javascript 仅为订阅返回主题,javascript,typescript,rxjs,observable,subject,Javascript,Typescript,Rxjs,Observable,Subject,我的问题是关于在不允许接收者对主题执行.next()操作的情况下返回对主题的引用 例如,我有一个服务,它包含一个主题,可以触发该主题的新事件 class ExampleService { private exampleSubject = new Subject<boolean>; // Ideally the only way to call next on the subject doNext() { this.exampleSubject.next(true
class ExampleService {
private exampleSubject = new Subject<boolean>;
// Ideally the only way to call next on the subject
doNext() {
this.exampleSubject.next(true);
}
getSubject() {
// Ideally returning a reference to the subject but only with the
// ability to subscribe and listen for events, not to call .next()
return this.exampleSubject;
}
}
官方推荐的方法(假设您使用的是TypeScript)是强制将主题重新键入一个可观察的对象(主题与任何其他对象一样可观察):
类示例服务{
private exampleSubject=新主题();
observable$:observable=this.exampleSubject;
...
}
现在,observable$
可以公开,因为它只是一个常规的可观察对象。TypeScript不允许您调用egExampleService.observable$.next()
,因为此方法在observable上不存在
如果您只使用JavaScript,则可以使用examplepubject.asObservable()
从主题返回可观察内容
关于RxJS的GitHub的讨论也是相关的:官方推荐的方法(假设您使用的是TypeScript)是强制将主题重新键入一个可观察对象(主题与任何其他对象一样可观察):
类示例服务{
private exampleSubject=新主题();
observable$:observable=this.exampleSubject;
...
}
现在,observable$
可以公开,因为它只是一个常规的可观察对象。TypeScript不允许您调用egExampleService.observable$.next()
,因为此方法在observable上不存在
如果您只使用JavaScript,则可以使用examplepubject.asObservable()
从主题返回可观察内容
关于RxJS的GitHub的讨论也是相关的:谢谢!这就是我要找的。asObservable()与Observable类型相结合是完美的!谢谢这就是我要找的。asObservable()与Observable类型相结合是完美的!
ExampleService.getSubject().subscribe(() => {
//do something
}) // ok
ExampleService.getSubject().next(true) // error/not allowed
class ExampleService {
private exampleSubject = new Subject<boolean>();
observable$: Observable<boolean> = this.exampleSubject;
...
}