【问题标题】:Move from Observable to BehaviorSubject [closed]从 Observable 移动到 BehaviorSubject [关闭]
【发布时间】:2020-03-31 11:25:21
【问题描述】:

我有和可观察的和一个条件:

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&lt;DataModel[]&gt; 更改为 BehaviorSubject&lt;DataModel[]&gt; 并使用 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')

我错过了什么?

【问题讨论】:

    标签: angular rxjs angular8 angular-observable


    【解决方案1】:

    我认为你错过了构造函数部分。

    let data$: BehaviorSubject<DataModel[]> = new BehaviorSubject<DataModel[]>([]);
    

    看看:Component interaction on angular.io

    与behaviorsubject 和subject 的唯一区别是behavioursubject 采用初始值并持有对最新值的引用,因此您可以订阅它并始终获得一个值。另一方面,主题是关于时间的。

    【讨论】:

      【解决方案2】:

      你应该初始化你的BehaviorSubject

      let data$ = new BehaviorSubject<DataModel[]>(INITIAL_VALUE or undefined);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        相关资源
        最近更新 更多