【发布时间】:2017-07-05 03:49:51
【问题描述】:
我仍然对 observables 感到很困惑。它们非常复杂。
我正在尝试编写一个服务类,该服务类可用于将登录用户的地址作为可观察列表进行监控。问题是我猜当用户登录或注销时列表引用本身会发生变化。
export class AddressService {
user: any;
addresses$: FirebaseListObservable<Address[]>;
constructor(private db: AngularFireDatabase, private authService: AuthService) {
authService.user$.subscribe((user) => {
this.user = user;
if (this.user) {
this.addresses$ = this.db.list(`/users/${this.user.uid}/addresses`);
} else {
this.addresses$ = undefined;
}
});
}
}
当我尝试将订阅者添加到列表时,我得到了 null,因为我猜 addresses$ 在添加时没有定义,因为它取决于登录用户首先解析。
// in a UI component
ngOnInit() {
this.addresses = this.addressService.addresses$;
}
就像我需要一个新的 observable,它在用户登录时发出一个新的 observable 列表!正在查看http://reactivex.io/documentation/operators/switch.html - 也许这可以以某种方式工作?
此处已编辑更新 这就是我想出的(只是从课堂上提取的)
// users can monitor this to get the latest address book.
addresses$: Observable<FirebaseListObservable<any>>;
// keeps a reference to the address subject.
private addressSubject = new BehaviorSubject<any>(Observable.empty());
constructor(private db: AngularFireDatabase, private authService: AuthService) {
this.addresses$ = this.addressSubject.asObservable();
authService.user$.subscribe((user) => {
this.user = user;
if (this.user) {
this.addressSubject.next(this.db.list(`/users/${this.user.uid}/addresses`));
} else {
this.addressSubject.next(Observable.empty());
}
});
}
【问题讨论】:
标签: angular rxjs angularfire2