【发布时间】:2018-06-27 18:18:45
【问题描述】:
我已经查看了这个https://github.com/angular/angular/issues/12129 但我没有看到任何解决方案...
Angular 2.0.1 AsyncPipe doesn't work with Rx Subject 。
这里的解决方案是在组件中创建一个可观察变量
我有但仍然无法工作...如果我将 UserStateService 中的主题切换到 BehaviorSubject 一切正常,不知道为什么它不工作...
注意: 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
});
}
users-state.service.ts
userListState = new Subject<User[]>(); <-- Change this to BehaviorSubject<User[]>([]) everything works!
setUsersList(users: User[]):void {
this.userListState.next(users.slice());
}
getUsersListState():Observable<User[]>{
return this.userListState.asObservable();
}
组件.ts
users: Observable<User[]>;
ngOnInit() {
if(this.usersStateService.hasUserList()){
this.users = this.usersStateService.getUsersListState(); -|
|
// this.usersStateService.getUsersListState() |
// .subscribe((x) => console.log(x)); -| <-- This does not output for some reason IF Subject... BehaviorSubject works..
}else{
console.log("No data in local stat -> fetch") . <-- This works either with Subject or BehaviorSubject
this.userData.fetchUsers();
this.users = this.usersStateService.getUsersListState();
}
}
HTML
<li *ngFor="let u of (users | async)">u.name</li>
请提供任何见解,谢谢!
【问题讨论】:
-
Subject 已经是一个 observable,你可以直接指出它。在您的组件中,您可以这样做 this.users = this.usersStateService.userListState;
-
@Vikas 感谢您提供的链接,这很有帮助
标签: angular rxjs subject behaviorsubject