NgRx/Data 如何在 get With Query 上为实体设置加载标志
NgRx/Data how to set loaded flag for an entitiy on getWithQuery
我目前在我的项目中使用 NgRx Data 来处理新闻实体。
我有一个解析器来检查新闻实体是否已加载,然后路由到 /news 页面(我显示新闻的地方)
解析器正在监听 loaded$ observable,如果它是 false,他将调用 getAll 方法来获取消息,然后将 loaded 设置为 true。
但是我实现了无限滚动,现在只想使用 .getWithQuery 方法通过查询获取新闻。这工作正常但是当我通过查询调度的动作得到新闻时:
"ngrx/data/get/many/success" 只是更改加载标志而不是加载标志。
因此解析器永远不会路由到该页面。有什么办法可以在 getWithQuery 成功完成后更改加载标志?我的解析器目前看起来像这样:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.newsEntityService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.newsEntityService.getAll(); // <-- here I want to call .getWithQuery(queryParams)
}
}),
filter(loaded => !!loaded),
first()
);
}
我试着像这样手动设置加载标志:
this.newsEntityService.getWithQuery({startIndex: '0', endIndex: '5'}).pipe(
tap(news => this.newsEntityService.setLoaded(true))
);
但这不起作用。
我也在文档中进行了搜索,看到您可以覆盖默认的 reducer,但我真的不知道这是如何完成的。
https://ngrx.io/guide/data/entity-reducer#entity-cache-metareducers
我遇到了同样的问题,这让我发疯了 2 天,我不确定这是否是最好的解决方案,但作为一种解决方法,我这样做了。
return this.paymentsService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.paymentsService.getWithQuery(this.propertyId.toString()).subscribe(
{
next: value => this.paymentsService.setLoaded(true)
}
);
}
}),
filter(loaded => !!loaded),
first()
);
我订阅了,然后将标志设置为 true,它起作用了。现在只调用一次后端,然后从存储中检索数据。
希望对您有所帮助。
我目前在我的项目中使用 NgRx Data 来处理新闻实体。
我有一个解析器来检查新闻实体是否已加载,然后路由到 /news 页面(我显示新闻的地方)
解析器正在监听 loaded$ observable,如果它是 false,他将调用 getAll 方法来获取消息,然后将 loaded 设置为 true。
但是我实现了无限滚动,现在只想使用 .getWithQuery 方法通过查询获取新闻。这工作正常但是当我通过查询调度的动作得到新闻时:
"ngrx/data/get/many/success" 只是更改加载标志而不是加载标志。
因此解析器永远不会路由到该页面。有什么办法可以在 getWithQuery 成功完成后更改加载标志?我的解析器目前看起来像这样:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.newsEntityService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.newsEntityService.getAll(); // <-- here I want to call .getWithQuery(queryParams)
}
}),
filter(loaded => !!loaded),
first()
);
}
我试着像这样手动设置加载标志:
this.newsEntityService.getWithQuery({startIndex: '0', endIndex: '5'}).pipe(
tap(news => this.newsEntityService.setLoaded(true))
);
但这不起作用。
我也在文档中进行了搜索,看到您可以覆盖默认的 reducer,但我真的不知道这是如何完成的。
https://ngrx.io/guide/data/entity-reducer#entity-cache-metareducers
我遇到了同样的问题,这让我发疯了 2 天,我不确定这是否是最好的解决方案,但作为一种解决方法,我这样做了。
return this.paymentsService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.paymentsService.getWithQuery(this.propertyId.toString()).subscribe(
{
next: value => this.paymentsService.setLoaded(true)
}
);
}
}),
filter(loaded => !!loaded),
first()
);
我订阅了,然后将标志设置为 true,它起作用了。现在只调用一次后端,然后从存储中检索数据。
希望对您有所帮助。