问题标签 [ngrx-store-8.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.
angular - 使用异步管道订阅 Observable 时如何处理 ExpressionChangedAfterItHasBeenCheckedError?
我有一个基于 ngRx/store 的简单加载器机制:
行动
减速器
选择器
组件.ts
组件.html
调度示例
Redux 开发工具显示单个LoadingStartedAction
和单个LoadingEndedAction
.
如果我使用异步,我会收到错误:
但是,如果使用通过显式订阅(即<div [hidden]="!isLoading" class="overlay displayO">
)获得的值,它可以正常工作而不会出现错误。
我看到它说了一些关于undefined
并且false
好像在初始化期间isLoading
设置为的内容false
,但初始状态直接定义为false
.
如果绑定属性在函数中多次更改,我会遇到此错误,但我看不到我在这里是如何做到的。
不确定它是否重要,但我也在使用storeFreeze
meta reducer 来防止状态发生突变:
问题:使用异步管道订阅 Observable 时如何处理 ExpressionChangedAfterItHasBeenCheckedError?
angular - 将 @ngrx/router-store 操作与 ngrx 8 createReducer() 和 on() 函数一起使用
我有一个ngrx v8
样式化简器(使用 createReducer + on),它需要对路由更改做出反应。
这无法编译,因为ROUTER_NAVIGATION
不是动作创建者:
'"@ngrx/router-store/navigation"' 类型的参数不可分配给 'ActionCreator>' 类型的参数。类型“@ngrx/router-store/navigation”不可分配给类型“FunctionWithParametersType”
它不适用于RouterNavigationAction
以下任何一种:
'boolean' 类型的参数不能分配给 'ActionCreator>' 类型的参数
如何在 createReducer/on 函数中使用 ngrx/router-store 操作?我找不到为给定动作导出的动作创建者。
angular8 - Angular ngrx商店测试`状态中不存在功能名称“storeOne”`
在我通过以下视频进行 ngrx 隔离测试之后: John Crowson - 在 NgRx 8 中使用 MockStore | AngularUP
我尝试在我的简单项目中实现相同的功能。但是我收到了我无法理解的错误。有人帮我解决吗?
这对我有很大的帮助。
测试ts文件:
运行后我收到以下错误:
angular8 - TypeError:reducerManager.addFeatures 不是函数
我正在尝试使用规范文件编写测试,但出现以下错误:
TypeError: Cannot read property 'loading' of undefined
- 无法理解要么解决它。
有人帮我吗?
这是我的 spec.ts 文件:
我得到的错误:
我的 componet.ts 文件:
更新
我的加载状态更新为如下:
但得到一个错误:
angular - Angular 8 Async Pipe 订阅问题
完整的 StackBlitz 示例:https ://stackblitz.com/edit/angular8-async-pipe
app组件模板中有三个相同的组件:
每个组件调度它自己的 NgRx 动作,它使用 NgRx 效果触发一个 Http 请求并等待其完成:
在使用异步管道的每个组件中,我想在 Http 请求正在进行时显示微调器:
但在这种情况下,只有<app-spinner></app-spinner>
组件中的微调器在 Http 请求过程中显示。如果应用组件模板中的组件顺序发生了变化:
在这种情况下,组件中的Spinner 在<app-loader></app-loader>
Http 请求过程中显示。所以只有模板中的最后一个组件按预期工作。
那么Angular 8中的异步管道发生了什么变化或者我做错了什么?
完整的 StackBlitz 示例:https ://stackblitz.com/edit/angular8-async-pipe
angular8 - 如何控制容器组件中的可观察数据
在我的组件中,我从商店获取数据,如下所示:
分配后,我试图在“ngChanges”中打印“this.data”,例如:
但ngOnChanges
本身没有触发。我无法控制我收到的数据。我的代码有什么问题?或者什么是正确的方法?
我在这里没有使用“订阅”方法。
angular - 扩展 @ngrx/router-store routerReducer 以修改添加到 RouterStateUrl 的字段
如何使用 Angular 8、ngrx 8 扩展逻辑我使用自定义序列化程序保持路由器状态
export class CustomSerializer implements RouterStateSerializer<RouterStateUrl>
自定义状态在哪里
} 添加一个新字段 -breadcrumbs
对于整个商店,我有一个这样的减速器映射:
我想操纵我的路由器状态的自定义部分(面包屑字段)。是否有一种标准方法可以扩展 routerReducer 以允许更改自定义字段?
更新:我看到的一种可能的解决方法是在商店中为面包屑创建一个单独的功能,保持路由器状态功能的纯净。这将需要新功能来减少路由器操作。在我看来,这是一个 hack。路由器状态允许使用额外字段扩展状态似乎不合逻辑,但减速器不允许
ngrx-store-8.0 - 我无法使用 ngrx 显示单个实体对象
您好,我使用 ngrx 和 spring boot 来显示所有产品。但我无法显示一个选定的产品。
我的 getProductAction 等效果很好。这是 Redux 中的结果:
请帮忙
这是我的状态和初始状态:
这是我的行动:
这是我的减速机:
这是我的效果:
我执行此代码以获取当前选定的 id:
我执行此代码以获取当前选定的产品,但它不起作用:
我试图得到产品,但我什么都没有:
请帮忙。谢谢
angular - 带有开玩笑的 Angular ngrx 测试抛出错误`console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29`
我为我的ngrx/store
with做测试jestjs
。我得到了测试通过的结果。即使收到如下错误:
任何人帮助我理解上述问题?以及如何解决?
提前致谢。
更新: 根据 Luctia 的建议,我修复了 cors 问题。但收到如下错误:
需要为此添加任何解决方法吗?
angular - ngrx 8:来自 reducer 函数的 @ngrx/data 实体的访问状态
我需要在 reducer 函数中访问 ngrx/data 实体的状态。
我正在构建一个寻呼机(分页),用户可以在其中导航到最后一页以及其他选项。但我不知道缓存中有多少项目,EntitySelectorsFactory
does( selectCount
),但我不想在组件中获取数据并使用道具来传递它们,而是它们应该在减速器中。
或者也许有更好的方法。
行动
减速机
不管我在做什么
它总是 0.rantSelectors.selectCount.length
或以上。可能是因为长度为 0。我还需要知道increment
减速器中“咆哮”实体的长度或数量。
我不知道如何获得实际价值。
我在想......有一个实体计数选择器并使用道具在toEnd
动作中传递该计数。另一种选择是副作用,但它们令人困惑,恕我直言不是编写代码的正确方法(不可读的代码,缺少直接原因/结果,是的,我知道,我不想争论它)。然后,即使创建了一个副作用,如何在模块中定义它?它会是AppEffects
副作用还是明显的副作用?我猜 AppEffects 因为它不在另一个模块中。
app.module.ts
AppEffects = 几乎是空的,默认ng add
内容。
所以是的,我需要在 reducer 中获取 @ngrx/data 实体的状态,获取它的实际值,或更优雅的方法。