从 Observable 转移到 BehaviorSubject
Move from Observable to BehaviorSubject
我有并且可以观察到它的条件:
let data$: Observable<DataModel[]>;
this.httpClient.get<DataModel[]>>(`data`)
.pipe(map((result: DataModel[]>) => this.data$ = result));
let result: boolean = this.data$.pipe(
map(x => x.find(y => y.child.some(z => z.id == id))),
map(x => x ? ['B'].some(y => y === x.child.find(z => z.id == 2)) : false));
我现在将 data$
从 Observable<DataModel[]>
更改为 BehaviorSubject<DataModel[]>
并使用 this.data$.next(result)
设置 data$
值。
let data$: BehaviorSubject<DataModel[]>;
this.httpClient.get<DataModel[]>>(`data`)
.pipe(map((result: DataModel[]>) => this.data$.next(result));
let result: boolean = this.data$.pipe(
map(x => x.find(y => y.child.some(z => z.id == id))),
map(x => x ? ['B'].some(y => y === x.child.find(z => z.id == 2)) : false));
使用 BehaviorSubject 时,我在 this.data$.pipe(
上收到错误
undefined is not an object (evaluating 'this.data$.pipe')
我错过了什么?
我想你错过了构造函数部分。
let data$: BehaviorSubject<DataModel[]> = new BehaviorSubject<DataModel[]>([]);
看看:Component interaction on angular.io
与 behaviorsubject 和 subject 的唯一区别是 behaviorsubject 采用初始值并持有对最新值的引用,因此您可以订阅它并始终获得一个值。另一方面,主题是关于时间的。
你应该初始化你的 BehaviorSubject
let data$ = new BehaviorSubject<DataModel[]>(INITIAL_VALUE or undefined);
我有并且可以观察到它的条件:
let data$: Observable<DataModel[]>;
this.httpClient.get<DataModel[]>>(`data`)
.pipe(map((result: DataModel[]>) => this.data$ = result));
let result: boolean = this.data$.pipe(
map(x => x.find(y => y.child.some(z => z.id == id))),
map(x => x ? ['B'].some(y => y === x.child.find(z => z.id == 2)) : false));
我现在将 data$
从 Observable<DataModel[]>
更改为 BehaviorSubject<DataModel[]>
并使用 this.data$.next(result)
设置 data$
值。
let data$: BehaviorSubject<DataModel[]>;
this.httpClient.get<DataModel[]>>(`data`)
.pipe(map((result: DataModel[]>) => this.data$.next(result));
let result: boolean = this.data$.pipe(
map(x => x.find(y => y.child.some(z => z.id == id))),
map(x => x ? ['B'].some(y => y === x.child.find(z => z.id == 2)) : false));
使用 BehaviorSubject 时,我在 this.data$.pipe(
undefined is not an object (evaluating 'this.data$.pipe')
我错过了什么?
我想你错过了构造函数部分。
let data$: BehaviorSubject<DataModel[]> = new BehaviorSubject<DataModel[]>([]);
看看:Component interaction on angular.io
与 behaviorsubject 和 subject 的唯一区别是 behaviorsubject 采用初始值并持有对最新值的引用,因此您可以订阅它并始终获得一个值。另一方面,主题是关于时间的。
你应该初始化你的 BehaviorSubject
let data$ = new BehaviorSubject<DataModel[]>(INITIAL_VALUE or undefined);