Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular NGRX过滤器导致表达式更改终端检查错误_Angular_Ngrx - Fatal编程技术网

Angular NGRX过滤器导致表达式更改终端检查错误

Angular NGRX过滤器导致表达式更改终端检查错误,angular,ngrx,Angular,Ngrx,我在选择器上使用NGRX过滤器,根据过滤器的状态值过滤列表中的项目。。当页面第一次加载时,没有问题。如果我刷新页面,我会得到一个表达式ChangedTerithasBeenCheckedError错误。如果我删除/注释过滤器部分,错误就会消失。有没有办法在不引起此错误的情况下进行选择器筛选 export const getRatings = (state: MyState) => state.ratings .filter(rating => state.fi

我在选择器上使用NGRX过滤器,根据过滤器的状态值过滤列表中的项目。。当页面第一次加载时,没有问题。如果我刷新页面,我会得到一个
表达式ChangedTerithasBeenCheckedError
错误。如果我删除/注释过滤器部分,错误就会消失。有没有办法在不引起此错误的情况下进行选择器筛选

export const getRatings = (state: MyState) => state.ratings
    .filter(rating =>
        state.filterByText === '' ||
        rating.name.toLowerCase().includes(state.filterByText.toLowerCase())
    );
在组件中使用

ngOnInit() {
  this.ratings$ = this.store.select(myState.getRatings);
}
在html中使用

<sb-rating-cards [ratings]="ratings$ | async"></sb-rating-cards>

借助RxJs,您可以随心所欲地变换Observable(冷、热、回放等)。若输入可观测发射,则会触发变化检测,所以我认为角度分量的设计目的是将可观测作为输入,而不是实时流

这是一个(如果你可以这么说的话)

有人建议添加一个
管道(延迟(0))
,这可能是解决它的一种快速方法(但在现实生活中,如果它需要一些时间来构建,它可能会给您带来问题,因为
delay(0)
类似于
setTimeout
——它在
async
调度器上运行,该调度器在宏任务队列中运行(就像
setTimeout

否则,按原样传递Observable并在子组件中订阅,在子组件中还可以管理销毁时的取消订阅