与ngrx

时间:2018-11-26 20:40:01

标签: rxjs ngrx

我正在努力处理下面的代码示例。我尝试过compareFilters总是return true,总是return false,无论哪种方式,我的日志中都会出现很多“ *******”-至少应该我已经完全切断了供应?我想念什么?

    this.filters = this.store
        .select(state => state.filters)
        // This line needed as otherwise change in geolocation triggers state to be
        // resent, overwriting any changes user has made on filters menu
        .pipe(
            distinctUntilChanged(compareFilters),
            tap((filters: Filters) => {
                console.log("*****", filters);
                this.location.pushState(
                    {},
                    "",
                    "/recommendations/" + toUrl(filters)
                );                    
            })
        );

更笼统地说,我在组件中看到的是,无论状态的哪一部分发生了变化,ngOnChanges每次都会报告所有道具的变化

1 个答案:

答案 0 :(得分:0)

嗯,我不这么认为。我在StackBliz上编写了快速示例,它可以按预期工作。仅打印1张。您确定ngrx存储不会发出所有事件吗?因为您的rxjs代码是正确的。

import { Observable, of } from 'rxjs';
import { distinctUntilChanged, tap  } from 'rxjs/operators';

of("1", "2", "3", "4" ,"5")
.pipe(
  distinctUntilChanged(coperator),
  tap(t => console.log(t))
)
.subscribe()

function coperator(t){
  return true;
}

可能是问题出在调用this.location.pushState时,您在tap方法中调用了某些东西,这些东西修改了商店,从而产生了新事件。我不知道,但反弹一些想法不会有伤害。