问题标签 [ngrx-effects]

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 投票
2 回答
3617 浏览

angular - 取消 ngrx 效果中的计时器

我有一个微调器,我希望微调器在显示之前等待 x 秒。但是,如果在微调器等待超时完成期间调用 REQUEST_DEACTIVATE_SPINNER,它应该停止触发 ACTIVATE_SPINNER 操作。又名我想取消活动计时器。这就是我到目前为止所拥有的。

有没有可能向我们展示如何取消正在返回到效果的计时器。

0 投票
1 回答
441 浏览

angular - 对象Angular 2+ ngrx中的嵌套数组

该 api 正在返回一个嵌套对象,我在这里想要的是进入嵌套数组并获取所有patato-child

我还制作了所有的动作、效果、减速器。

json视图:

模型视图:

组件.ts

HTML 视图:

这种结构有什么问题,我无法使用ngFor获得任何 patato-child来列出所有 patato 子级

我正在使用 Angular 2+ Redux+@ngrx

0 投票
1 回答
12421 浏览

javascript - ngRx 状态更新和效果执行顺序

我对这个问题有自己的看法,但最好仔细检查并确定。感谢您的关注并尝试提供帮助。这里是:

想象一下,我们正在调度一个动作,该动作触发了一些状态变化,并且还附加了一些效果。所以我们的代码必须做两件事——改变状态和做一些副作用。但是这些任务的顺序是什么?我们是否同步进行?我相信首先,我们改变状态然后做副作用,但是有没有可能,这两个任务之间可能会发生其他事情?像这样:我们改变状态,然后得到一些我们之前做的 HTTP 请求的响应并处理它,然后做副作用。

[编辑:] 我决定在这里添加一些代码。我也简化了很多。

状态:

行动:

减速器:

影响:

这就是我们调度 FetchItemAction 的方式:

期望的场景:

糟糕的场景:

所以问题很简单,糟糕的情况是否真的会发生?

0 投票
1 回答
112 浏览

angular - 如何使用来自先前 http 请求的数据发出 http 请求?

我有一个 Issue 对象,其中一个属性是 Tool 对象数组。问题和工具是我数据库中的两个不同的表。

在我的问题日志组件中,我正在调度一个操作来搜索与我的搜索查询匹配的问题。这工作得很好。

我一直在尝试做的下一件事是获取问题列表和每个问题 ID,将其传递给我的工具服务,以便我可以获得与该问题相关的工具。

我能够让它工作的方法是添加另一个监听 ISSUE.SEARCH.COMPLETE 动作的效果。然后我遍历了我的工具服务中的一系列问题,以便我可以为每个问题 ID 调用 API 服务并将工具属性添加到该问题。这在几个方面似乎是错误的。一个是对于大量问题,加载所有工具需要很长时间,如果我尝试启动另一个问题搜索,我必须等待工具从前一个工具加载,然后我的应用程序响应。第二,当我的工具 API 一次只需要一个问题 ID 来获取与该问题相关的工具列表时,将整个问题数组传递到工具服务似乎是错误的;这不会使我的工具服务在我的应用程序的其他地方轻松重复使用。

我不希望等到完成获取问题列表的 API 调用后,才能开始获取与每个问题 ID 关联的工具。是否可以在我的问题搜索 $ 效果中添加代码(在下面评论的地方),以便在构建我的问题列表时开始添加工具?

零件:

影响:

我也尝试从我的问题服务中调用我的工具服务,但也不认为这是正确的方法。

0 投票
1 回答
262 浏览

angular - 类似于动作的返回值

我想知道是否有最佳实践来模拟类似 ngrx Action 的返回值之类的东西。

假设我有一个用于创建新地址的通用组件。这可以从整个应用程序的多个位置调用:

然后,当用户输入所有地址信息并保存地址时,呼叫者 - 并且只有呼叫者 - 应该得到通知并更新自己(例如,将地址添加到组合框或以文本形式在摘要中显示)。

因此,Store 中的单个字段“latestCreatedAddress”是不够的。我需要多个字段,每个字段用于每个调用者。

有没有一些聪明的方法来处理这样的案例?

0 投票
1 回答
764 浏览

angular - Angular:跟踪模型中的每一个变化

更新:我最终使用了访问模型并在设置器中调用外部更改跟踪的属性。

原始问题

我有一个使用 AngularJS 编写的系统,我需要从外部跟踪每个模型的变化(跟踪脏)。在 AngularJS 中,为每个模型的属性(包括数组内元素属性的更改)添加观察者很简单。注意:模型用作 UI 组件的数据。

数据流是这样的:

  1. SPA 从服务器请求数据。
  2. 服务器获取数据。
  3. 在返回数据之前,会在每个模型的属性中添加一个观察者。
  4. 观看的模型返回到 SPA。

这是监视更改的主要代码:

每次更改任何模型中的属性时,都会触发一个事件,并且模型的属性在外部更改控制中被标记为脏。

我正在尝试在新的 Angular 中找到此功能的替代品,但我觉得我没有走在正确的道路上,我目前拥有的唯一选择是:

  • 使用类似 RxJSDo的方法来调用脏跟踪。
  • 使用 ngrx Observables 并添加 @Effects 来触发脏跟踪。

一件重要的事情是,在 AngularJS 中,我有一个点,所有模型都被添加到脏跟踪控制中。

有没有办法在 Angular 中实现这一点?还是一种拦截 Angular 的变更检测以触发脏跟踪的方法?

注意:我发现了一个在我最初的搜索过程中不知何故错过的问题,有没有办法在 ngForm 之外实现这一点?如何观察 Angular 2 中的表单变化?

0 投票
1 回答
403 浏览

angular - 在@ngrx/effects 中更新打字稿时出错

我有这个错误:'Actions' 类型的'this' 上下文不可分配给'Observable' 类型的方法'this'。属性“电梯”的类型不兼容。

对于这个文件:

有人可以向我解释为什么会发生以及如何解决这个问题吗?

我读到这个:Error with Actions observable in @ngrx/effects using TypeScript 2.4.1

但我不明白如何解决我的问题。

我更新@ngrx/效果:^2.0.3 → ^4.0.1打字稿 ^2.3.4 → ^2.4.1

这是当前的 package.json:

提前致谢。

0 投票
0 回答
156 浏览

ngrx - 全局处理程序未捕获到 ngrx/effects 错误

我们的效果定义为:

有一个减速器正在监听LoadAllFailureAction并更改存储中的一些标志。

现在,如果在处理该操作时,我对该空值(在 LoadAllFailuerAction 中发送)进行对象解构,这会产生 TypeError,则 GlobalErrorHandler 不会捕获该错误(它会捕获未捕获的异常)。此外,效果停止运行。

另一方面,使用完全相同的效果/减速器设置,如果我throw Error()在减速器中手动执行,它确实会被捕获。

现在这对我来说完全是个谜。

有什么想法吗?

0 投票
1 回答
5717 浏览

angular - ngrx 4 测试效果 jasmine-marbles

我正在 ngrx 商店测试效果。在将ngrx更新到版本后,我发现测试它的方式已经改变了。

不幸的是,我没有找到任何有关 jasmine-marbles 的文档。谁能解释一下冷热功能的第一个参数是什么意思?是否有可能找到有关它的任何文档?

0 投票
0 回答
876 浏览

angular - ngrx 未在 Observable.interval 中调度操作

我有一个使用ngrx的角度应用程序,我想每x秒发送一个动作,所以我这样做了:

所以这应该每秒发送一个动作。我正在使用 ngrx/effects 来拦截此操作并调用服务,但它只在第一次工作。好像我的订阅在第一次通话后就完成了。

如果我将操作调用替换为服务调用,则一切正常。我究竟做错了什么?

这是我的@Effects

编辑。

好的,我得到了问题,最后一个必须是地图。