Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅为订阅返回主题_Javascript_Typescript_Rxjs_Observable_Subject - Fatal编程技术网

Javascript 仅为订阅返回主题

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

我的问题是关于在不允许接收者对主题执行.next()操作的情况下返回对主题的引用

例如,我有一个服务,它包含一个主题,可以触发该主题的新事件

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不允许您调用eg
ExampleService.observable$.next()
,因为此方法在observable上不存在

如果您只使用JavaScript,则可以使用
examplepubject.asObservable()
从主题返回可观察内容


关于RxJS的GitHub的讨论也是相关的:

官方推荐的方法(假设您使用的是TypeScript)是强制将主题重新键入一个可观察对象(主题与任何其他对象一样可观察):

类示例服务{
private exampleSubject=新主题();
observable$:observable=this.exampleSubject;
...
}
现在,
observable$
可以公开,因为它只是一个常规的可观察对象。TypeScript不允许您调用eg
ExampleService.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;

  ...
}