问题标签 [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.
angularjs - 用于选择功能的 ngrx 参数
有没有办法将参数传递给ngrx select函数?
以下是我的用例:
我正在维护商店中的评论列表。
我写了一个组件来代表一个评论。所以,一个 CommentComponent 知道组件对象的 id
每条评论都将具有likelyBy、reportBy、...等属性在UI中,我使用*ngFor显示所有组件
现在我希望我的 CommentComponent 使用组件的 id 只订阅一个评论对象。
现在,我订阅了顶级组件中的所有评论,并将每条评论作为输入传递给 CommentCompoent。
当前的方法并不干净,因为角度变化检测策略(即使我使用 onPush)必须为所有评论渲染 DOM,即使只有一个评论发生变化。
感谢我可以将评论 id 传递给选择器函数的任何建议,以便每个 CommentComponent 只能订阅一个评论。
在此先感谢, 苏达卡尔
ngrx - ngRx 4 路由器存储路由器序列化器
当使用router-store
from ngRx 4 和路由器序列化程序时,我们是否应该继续使用内置路由器ActivatedRouterSnapshot
处理以下情况(从组件内的路由器参数中提取令牌):
路由器序列化程序显示了根级别查询参数的示例,但在这种情况下,我的组件是根的子组件,尝试为这些参数挑选子组件的确切分支而不是仅仅获取它们似乎是一个棘手的情况从组件的激活路由注入。
我正在尝试使商店成为唯一的事实来源,但是使用路由器序列化程序设置路由器状态片感觉很糟糕。
有没有一种好方法可以设置路由器序列化程序以执行类似于 Angular 路由器的参数而不使路由器状态对象对于开发工具来说太大?
typescript - TypeScript 编译器错误地报告 action.payload 不存在
我正在使用 Ngrx 4.03 和 typeScript 2.5.2。
我已经定义了一个动作:
在我相应的减速器中,TypeScript 告诉我 that action.payload
doesn't exist on Action
,即使我可以很好地记录该值。我究竟做错了什么?
angular - 减速器动作中的ngrx有效负载未编译
我正在尝试将我的 angular 2 应用程序迁移到 angular 4 和 ngrx 4。
我正在处理一个奇怪的打字稿编译问题,这是我在此更新之前没有遇到的。我在离线环境中工作,所以我不能在这里分享确切的代码。
我在网上寻找问题,我能找到的最接近的问题是这个问题: 关于有效负载类型 的问题这个问题中的代码在某种程度上类似于我试图做的事情,但不同的是我从动作中删除了 ActionTypes 对象(这是该问题的建议答案)但它没有解决我的编译错误。
我不能把我要处理的确切代码放在这里,但我的代码完全基于 github 上的 ngrx 示例 ngrx 官方示例
让我们看一下 book reducer 和 book actions book actions book reducer的例子
我的代码基本相同,当我尝试从操作中获取有效负载时,每个减速器案例(在 switch 案例中)都会发生错误,它告诉我如下信息:
(在我的代码中,我有不同的类,而不是 Book,但它的想法几乎相同)
现在我通过从 A | 转换动作类型来解决错误。乙| B 为 switch 中 case 对应的具体动作类型(使用 as typescript 关键字)。这个解决方案感觉很糟糕和hacky,我想知道是否有更好的解决方案。
我使用的版本:打字稿:2.4.1(我怀疑它可能连接到不使用与我相同的更新打字稿版本的ngrx示例)ngrx@store:4.0.3 ngrx@core:1.2.0 angular:(最新为17.9.17,有很多包里面有角度,我认为这个错误使用哪个角度并不重要,但我说这只是为了安全起见)打字稿:(2.4.1)(我读了ngrx关于需要升级打字稿的官方迁移文档,所以我这样做了)
更新:由于我得到了一个与我的问题无关的答案并且我被问到,这是我的代码失败的部分(我无法发布确切的帖子,但我手动复制了相关部分):
任务减速器.ts:
任务-actions.ts:
所以总而言之,我确实明白为什么 typescript 认为动作有效负载类型可能是 string | 是有意义的。使命 | ...但是在我基于此的ngrx示例中,似乎打字稿知道在那里推断案例中的特定类型,但对我来说,由于我不理解的原因这不起作用,可能与我有关使用打字稿 2.4.1?不确定,需要帮助
angular - StoreModule.forRoot() 和 StoreModule.forFeature() 有什么区别
最近,ngrx store 改变了在 Angular 应用程序中注册存储变量的方式。
StoreModule.forRoot() 和 StoreModule.forFeature() 有什么区别
我们是否需要同时注册两者才能使应用程序正常工作?
angular - Angular 4 ngrx/效果测试
我在弄清楚应该在使用 ngrx/store 等的 Angular 4 应用程序中测试效果的方式时遇到问题。对于 Angular2,有 EffectsRunner 和 EffectsTestingModule,但它们在 Angular 4 的 ngrx/store 版本中不存在。我我正在寻找一种方法来测试效果以及带有商店的整个应用程序
angular - angular / ngrx store 4:在组件测试中取消初始化状态
我必须在现有的 Angular(版本 4.3.3)应用程序中实现 ngrx/store(版本 4.0.3)。
由于此错误消息,我无法测试组件:
在阅读了这份提供商店进行测试的文档后,我认为实现应该很容易。
在我的规范文件中,我在 beforeEach 方法中导入了 StoreModule:
减速器看起来像:
这里是搜索减少器:
在组件的方法中,我在搜索服务方法(HTTP 请求)的订阅中调度特定操作:
在规范文件中,搜索服务是一个模拟服务。
在这个网站上阅读了很多答案后,我尝试在 beforeEach 方法中调度特定的操作来初始化state.search.results
状态。但我得到了同样的错误信息。
我该如何解决这个状态问题?
提前致谢。
angular - 使用 object.assign{} 更新 ngrx 状态,状态更新后页面会自动重定向
成功登录后,我将用户添加到 ngrx 状态。登录后,将同一用户添加到状态。从个人资料页面部分更新用户详细信息并使用Object.assign{}
替换状态后,用新数据替换旧状态,但在该操作之后页面会自动重定向。
我尝试了各种可能性来纠正代码。页面自动将我重定向到我的主页。我没有在任何router.navigate('')
地方使用过。
我正在使用:ngrx/store=> v.4.0.4
下面是减速器、动作和效果的代码:
我可以使用 更新状态Object.assing{}
,在状态中获取正确的值,但页面会被重定向。
是的,我确实有身份验证警卫,其中个人资料页面只能通过警卫访问,因此只有经过身份验证的用户才能访问他们的个人资料页面。
控制台中没有错误。调度事件成功执行并使用新数据更新状态。
我的 routing.ts 如下所示:
构造函数(私有数据库:数据库,私有路由器:路由器,私有存储$:存储,私有 spinnerService:SpinnerService){ this.spinnerService.show(); }
authGuard.ts
userUpdate 的效果
我在保存时使用观察者来获取更改检测以在屏幕上反映它,是因为观察者代码我被重定向了吗?this.profileObserver.next(data);
配置文件组件.ts
angular - 如果使用ngrx/store和效果,服务有什么用?
我正在尝试将 NGRX 添加到我的 Angular 项目中,但我不知道我是否还需要服务,因为组件可以调度操作。这是否意味着我不必使用除ngrx/store 之外的任何服务?
redux - 使用@ngrx/store 访问reducer 中的其他状态片
鉴于以下情况(假设我们不能改变状态的结构):
并且b1Reducer
取决于 的值a
(例如,因为它包含诸如用户信息之类的内容)。访问(只读)的最惯用方式是a
什么b1Reducer
?
我想出的解决方案是使用@ngrx/effects
, dispatch 另一个a
可以在减速器中使用的动作:
a
这是可行的,但是如果在许多 reducer 中使用几乎每个操作都需要重新调度,则变得难以管理。有没有更好的方法来处理这个?