Angular Rxjs Subject.asObservable()不工作,但行为主体工作…为什么?

Angular Rxjs Subject.asObservable()不工作,但行为主体工作…为什么?,angular,rxjs,subject,behaviorsubject,Angular,Rxjs,Subject,Behaviorsubject,我已经查过了 但我看不到任何解决办法 这里的解决方案是在组件中创建一个可观察的变量 fetchUsers():void{ this.httpClient.get<User[]>(this.apiUrl, { observe: 'body', responseType: 'json' }) .subscribe( (response: User[])=>{ this.usersStateService.setUsersList(response); &l

我已经查过了 但我看不到任何解决办法

这里的解决方案是在组件中创建一个可观察的变量

fetchUsers():void{
   this.httpClient.get<User[]>(this.apiUrl, {
  observe: 'body',
  responseType: 'json'
})
.subscribe( (response: User[])=>{
    this.usersStateService.setUsersList(response);  <-- set to local state service

  });

}
我有,但仍然没有工作。。。如果我将
UserStateService
中的Subject切换为behavior Subject,则不确定为什么它不起作用一切正常

注: UserDataService和UsersStateService都在根app.module.ts中提供

user-data.service.ts->发出我在组件中调用的http请求

fetchUsers():void{
   this.httpClient.get<User[]>(this.apiUrl, {
  observe: 'body',
  responseType: 'json'
})
.subscribe( (response: User[])=>{
    this.usersStateService.setUsersList(response);  <-- set to local state service

  });

}
fetchUsers():void{
this.httpClient.get(this.apirl{
观察‘身体’,
responseType:'json'
})
.subscribe((响应:User[])=>{

this.usersStateService.setUsersList(response);主题不保存任何数据,它只调用任何使用值订阅它的内容。Behavior主题保存数据,每次调用emit时都会替换当前数据。

当您试图从服务控制台登录时,用户列表:
带有主题它不包含任何持久数据

this.usersStateService.getUsersListState()              
 .subscribe((x) => console.log(x));  ==> would be empty 
使用BehaviorSubject它保存最后的数据,也可以使用值初始化

let _array = ['one','two']
let bs = new BehaviorSubject<any>(_array ).asObservable();
bs.subscribe(arr => {
 console.log(arr) // ==> Would log the _array: ['one','two']
})
let[u数组=['one','two']
设bs=newbehaviorsubject(_数组).asObservable();
订阅(arr=>{
log(arr)/=>将记录_数组:['one','two']
})
因此,在您的情况下,当您试图通过Subject获取数据时,它在第一次调用后(当您发出时)不存在,而Behavior Subject保留您的初始值,并且每次发出时,都会有持久数据。

**如果每次都需要多个值,则应查看ReplySubject

Subject不包含任何数据,它只调用使用该值订阅的任何内容。Behavior Subject包含数据,每次调用emit时,它都会替换当前数据。

当您试图从服务控制台登录时,用户列表:
带有主题它不包含任何持久数据

this.usersStateService.getUsersListState()              
 .subscribe((x) => console.log(x));  ==> would be empty 
使用BehaviorSubject它保存最后的数据,也可以使用值初始化

let _array = ['one','two']
let bs = new BehaviorSubject<any>(_array ).asObservable();
bs.subscribe(arr => {
 console.log(arr) // ==> Would log the _array: ['one','two']
})
let[u数组=['one','two']
设bs=newbehaviorsubject(_数组).asObservable();
订阅(arr=>{
log(arr)/=>将记录_数组:['one','two']
})
因此,在您的情况下,当您试图通过Subject获取数据时,它在第一次调用后(当您发出时)不存在,而Behavior Subject保留您的初始值,并且每次发出时,都会有持久数据。

**如果您每次需要多个值,您应该查看ReplySubject

Subject已经是一个可观察的对象,您可以直接指向它。在组件中,您可以这样做。users=this.usersStateService.userListState;@Vikas感谢您提供的链接这有助于lotSubject已经是一个可观察的对象。您可以直接指向它。在您的组件中nt你可以这么做。users=this.usersStateService.userListState;@Vikas谢谢你的链接这对很多人都有帮助你介意提供一些代码来展示你的意思吗?我想这会让你的答案更完整…一旦你更新了itI,我会标记为答案。我更新了更多细节,希望现在情况会好一些。祝你好运谢谢更新。。。对于其他人,也请查看评论中的Vikas链接。你介意提供一些代码来展示你的意思吗?我认为这将使你的答案更完整…一旦你更新了itI,我将标记为答案。我更新了更多详细信息,希望现在更好。祝你好运,感谢更新…对于其他人,也请查看评论中的Vikas链接。