变化检测:myObservable'之间的差异和' myObservable $ |异步'

时间:2017-02-24 12:23:13

标签: angular

我遇到了一个变化检测问题,我无法真正解决这个问题:

我可以在地图上显示多个位置(angular2-google-maps),这是有效的。显示的位置来自Observable(与当前选定位置组合的位置):

const locations$ = LocationService.locations;
const selectedLocations$ = new BehaviorSubject<Location[]>([]);

this.displayLocations$ = Observable.combineLatest(
  locations$,
  selectedLocations$,
  (locations, selected) => locations.map(loc => {
    if (selected.indexOf(loc) !== -1) {
      return Object.assign({}, loc, {selected: true});
    } else {
      return loc;
    }
  })
)

当我通过调用

发出一组选定的位置时
selectedLocations$.next([setOfLocations]);

视图更新得很好(既不是预先更新也不是地图更新)

this.displayLocations$.subscribe(l => this.displayLocations = l);

<pre>{{displayLocations | json}}</pre>

但这里不是:(预先更新和地图更新)

<pre>{{displayLocations$ | async | json}}</pre>

到目前为止,我认为,两者都是等同的变化检测方式。

到目前为止我可以这么说:

  • 添加.do(console.log)表示生成的集合发出正常。

  • 这与地图模块无关。

  • 所有事件都来自角度区域,所以(对我而言)这似乎不会导致问题。

  • 发出的数组是不同的实例,添加distinctUntilChanged()不会丢弃它们。此外,添加.map(arr => [...arr])并未改变任何内容。

  • 添加.do(() => _cdr.markForCheck())对此没有任何影响。

有关{{array}}(在控制器中订阅)和{{array$ | async}}表现不同的原因和时间的任何提示都将非常感激,我真的被困在这里。

0 个答案:

没有答案