问题标签 [ngrx-store-4.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
678 浏览

angular - 多次调用ngrx/store init

我知道这已经被多次解决(过去的大问题,但应该用 4.0 修复)并且 ngrx 示例应用程序也使用延迟加载,但init没有被多次调用。尽管如此,这个非常简单的设置(它使用了示例应用程序的许多组件)会导致 init 被调用两次,一次用于 the AppModule,一次用于延迟加载的Module1Module. Module2Module不是懒加载并且玩得很好。

最小的 repro repo或stackblitz repro

有没有人能够对这种行为有所启发?

编辑:在我正在开发的应用程序中,触发了这个问题,我注意到,随着每个新的初始化,整个动作历史似乎再次被调度。由于该应用程序尚未连接到 API,因此除了在控制台中之外,这不是很明显。如果这被连接到一个 API,那将意味着安静一些不必要的调用......

0 投票
0 回答
233 浏览

angular - 测试时无法在功能模块中设置根存储

这是组件测试的导入

我的测试

我的组件:

根存储状态:

根减速器:

路由器减速器的选择器:

**此选择器在组件测试中返回未定义,但在应用程序中工作正常。**

我尝试了在测试中导入 store 模块的不同组合

注意:即使只从根存储区访问用户,我也感到厌烦,它也无法正常工作。 我正在使用 ngrx 4.1.1 版本。

0 投票
0 回答
125 浏览

ngrx - 具有 ngrx/store 和 OnPush 更改检测的规范化器

我正在尝试使用 ngrx/store 和 normalizer 建立一个项目来展平数据。我发现如果我对来自选择器的数据进行非规范化,那么我不能(没有区别)在组件上使用 OnPush 更改检测。由于 denormalize 返回新实例。

有没有解决的办法?在哪个级别最好处理非规范化?

0 投票
2 回答
1544 浏览

angular - 特征切片为空时的 NgRx 选择器

在我的应用程序中有一个带有特征切片的商店:

特征的 Reducer Map:

和特征选择器:

有一个注销操作,在注销后清除主存储,slice注销后也是如此slice === null

使用选择器订阅特征存储切片的组件selectItem 然后失败,因为state.someReducer它是 null: state.someReducer.paramA

我的问题是:在这种情况下可以在选择器中使用三元运算符吗?它会破坏选择器记忆吗?或者有没有更好的方法来处理这种情况?

0 投票
1 回答
1322 浏览

angular - i18n 与 ngrx 商店 - 翻译角度应用程序

我写信是想征求你的意见。我们构建基于商店的 Angular 应用程序,这需要翻译。请求是使用官方 angular i18n 方法,尽管我不知道如何将我的翻译与商店中的值联系起来。有没有可能,有没有人有这方面的经验,或者我应该马上去像 ngx-translate 库这样的解决方案..?我必须说我研究了很多,但没有找到可以理解的答案(我是一名大三学生,我很难掌握所有的优点、缺点和可能的方法)答案。因此,如果您有任何适用的经验,我的要求是分享您的知识。提前致谢!

0 投票
2 回答
2981 浏览

redux - 如何从ngrx中的Router_Cancel获取先前的状态?

CanDeactivate我试图通过使用(如果表单脏且未保存)来限制用户导航离开当前页面。当我们点击任何链接时,Router_Navigation事件被调用并且它正在更新商店中的路由器状态,如果我取消模式弹出时的页面导航(从可以停用),Router_Cancel事件正在被调用,但当前路由器状态是没有更新(它仍然指向其他页面)。

我在ngrx文档中看到了这一点:

ROUTER_CANCEL 和 ROUTER_ERROR 包含导航前的存储状态。使用之前的状态来恢复存储的一致性。

有人可以帮我了解如何从Router_cancelAction 中获取以前的状态。

谢谢

0 投票
1 回答
710 浏览

angular - @ngrx/store 预加载保护捕获错误

我正在使用 @ngrx/store 来检查状态是否已经加载,并且我遇到了一个问题,即canActivate如果我使用过滤器,该方法永远不会返回。

这是 GetCompanies 操作的示例效果:

如果出现错误,我将发送 GetCompaniesFail 操作并将用户重定向到/login页面。没关系,有趣的部分是守卫。

如果出现错误并且加载不为假,则canActivate不会返回任何内容,因为checkStore什么也不做。

如果我更改filtermap它可以工作,但它只需要第一个值,false即使数据将成功加载。

我错过了什么?我该如何处理那里的 HTTP 错误?有没有办法等待特定状态或在内部抛出错误checkStore

预先感谢!

0 投票
1 回答
479 浏览

angular - Angular ngFor找不到不同的支持对象'[object Object]'

我正在尝试使用以下方法迭代 RxJS 存储状态的 Observable:

}

HTML:*ngFor="让 (propertyState | async).properties 的属性;让 i = index" (click)="onSelectProperty(i)"

并且还尝试过:

}

HTML: *ngFor="让属性的属性;让 i = 索引"

但是这两种情况我都会收到这个错误。

找不到“object”类型的不同支持对象“[object Object]”。NgFor 仅支持绑定到 Iterables,例如 Arrays。

另外,这里的 store 是在 type 的构造函数中声明的: private store: Store

fromApp.AppState 在 app reducer 中:

fromPropertyReducer.State 在属性 reducer 中:

此外,最初属性在遍历数组的 html 中显示得很好。但是在向 property.expenses 数组添加新费用的操作之后,是否会发生此错误。这就是我在减速器中添加新费用的方式:

我看了别人的帖子,所以尝试了第二种方法,但没有奏效。请帮忙。谢谢你。

0 投票
1 回答
555 浏览

angular - 父组件中服务器的初始状态

我正在检查ngrx 示例应用程序并试图找出一种在查找页面 ( http://localhost:4200/#/books/find ) 上初始化状态的好方法。

似乎我应该能够将其添加到 AppComponent

但这并没有填充商店中的商店,FindBookPageComponent 似乎它在连锁店中发生得太早了。想知道是否有人可以解释这一点并提供更好的方法。

注意:将 ngOnInit 添加到FindBookPageComponent作品中,但每次用户导航返回时都会调用它。如果有意义的话,我希望这更像是一个初始状态。

谢谢!

0 投票
0 回答
727 浏览

ngrx - 我应该如何让 Ngrx 异步操作按特定顺序解决

如果我以特定顺序调度 3 个异步操作(具有相应的效果/RESTservice 调用逻辑),我不能保证它们以相同的顺序解决。因为,它们是异步的,所以某些操作比其他操作更快/更慢。最终可能会这样:

例如,我想触发 3 个操作来更新数据库中的单个记录。一旦第一个执行并解决,我需要使用最新的记录器版本号更新存储(用于并发检查)。之后,可以使用最新版本号执行第二个...

对于我的用例,我更喜欢这个顺序:

我正在考虑有一个包含集合异步操作的队列,并且一次只能执行一个操作。解决当前操作后,我们将进行下一个操作。

NgRx 是否支持动作队列?或我应该使用任何等效功能来避免竞争条件?我将不胜感激任何建议/想法。谢谢