问题标签 [ngrx-store]
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 - 路由器保护不起作用
因此,我尝试关注 ngrx/example-app,并且堆放了路由器防护装置。我的警卫不起作用。
加载的属性存在于减速器中并被选中。сcode执行没有达到hasPlaylists函数所以我认为switchMap不起作用,但我不明白为什么=)
UPD:添加了路由器声明
UPD:我想我找到了解决方案。如果我使用地图而不是在这里过滤:
并在这里采取行动:
UPD:正如@Skeptor 在评论中建议的那样,我不需要map
获取元素,所以我可以在这里删除它
守卫工作正常,但我仍然不明白为什么它不能与过滤器一起使用=/
angular - Angular 动态控件、@ngrx/store 和单向数据绑定:控件永远不会被标记为“脏”
我正在使用@ngrx/store
并进行单向数据绑定。
我有一个愚蠢的组件,它获取值列表为@Input()
. 基于这个列表,我创建了一个FormArray
ofFormControl
来允许用户输入。ngOnChanges
如果我SimpleChanges
为值列表提供了新值,我会这样做。
由于单向数据绑定,每次用户输入一个字符时,都会向 store 发送一个动作,并且值列表会ngOnChanges
再次出现。由于FormArray
重新创建了,它不会保留dirty
andpristine
属性。他们被重置。
我正在使用trackBy
.
属性的值对dirty
我来说很重要,因为我使用它来决定是否显示验证警报。
知道如何解决这个问题吗?
我有一个显示问题的 plunker。我使用了 BehaviorSubject 来伪造@ngrx/store
。请尝试在任何输入控件中输入值并观察dirty
和pristine
,如图所示:https ://plnkr.co/edit/xZmU4ww8Y9PEgFOCOOw4?p=info
angular - 如何使用来自先前 http 请求的数据发出 http 请求?
我有一个 Issue 对象,其中一个属性是 Tool 对象数组。问题和工具是我数据库中的两个不同的表。
在我的问题日志组件中,我正在调度一个操作来搜索与我的搜索查询匹配的问题。这工作得很好。
我一直在尝试做的下一件事是获取问题列表和每个问题 ID,将其传递给我的工具服务,以便我可以获得与该问题相关的工具。
我能够让它工作的方法是添加另一个监听 ISSUE.SEARCH.COMPLETE 动作的效果。然后我遍历了我的工具服务中的一系列问题,以便我可以为每个问题 ID 调用 API 服务并将工具属性添加到该问题。这在几个方面似乎是错误的。一个是对于大量问题,加载所有工具需要很长时间,如果我尝试启动另一个问题搜索,我必须等待工具从前一个工具加载,然后我的应用程序响应。第二,当我的工具 API 一次只需要一个问题 ID 来获取与该问题相关的工具列表时,将整个问题数组传递到工具服务似乎是错误的;这不会使我的工具服务在我的应用程序的其他地方轻松重复使用。
我不希望等到完成获取问题列表的 API 调用后,才能开始获取与每个问题 ID 关联的工具。是否可以在我的问题搜索 $ 效果中添加代码(在下面评论的地方),以便在构建我的问题列表时开始添加工具?
零件:
影响:
我也尝试从我的问题服务中调用我的工具服务,但也不认为这是正确的方法。
javascript - Show navigation loader spinner with delay in angular 2+
I'm new to angular 2+ and RxJS, trying to get used to RxJS.
I show load spinner on route transitions, but only if it takes more then certain amount time, lats say 160ms
I have a load spinner as a separate component, with subscription to ngrx store, so I show/hide load spinner based on value in the sore (showSpinner)
In my app root component, I subscribe to router change events, and dispatch actions (SHOW_SPINNER/HIDE_SPINNER)
So the question is, Is there a simpler way to achieve it?
Here are parts of my code
....
angular - 类似于动作的返回值
我想知道是否有最佳实践来模拟类似 ngrx Action 的返回值之类的东西。
假设我有一个用于创建新地址的通用组件。这可以从整个应用程序的多个位置调用:
然后,当用户输入所有地址信息并保存地址时,呼叫者 - 并且只有呼叫者 - 应该得到通知并更新自己(例如,将地址添加到组合框或以文本形式在摘要中显示)。
因此,Store 中的单个字段“latestCreatedAddress”是不够的。我需要多个字段,每个字段用于每个调用者。
有没有一些聪明的方法来处理这样的案例?
angular - 加载硬编码数据时,ngrx/store 无法正常工作
我试图在我的 Angular 应用程序中使用 ngrx/store 几个小时,但我不知道我做错了什么。我的商店商品似乎永远不会更新。
这是我的商店界面:
Item 是一个自定义对象 - 这是模型:
我有一个作为中央集线器的服务,它包含主要的“项目”数组和一个加载数据的函数“loadItems()”(从另一个组件调用):
这是我调用'loadItems'的主要应用程序组件;
这是我的减速器功能:
以及我用来测试“项目”是否已更新的 html(它是一个简单的 div,它根据项目的大小绘制特定数量的按钮,在运行我的代码并加载手动数据后应该是 2) :
知道发生了什么吗?我对ngrx/store 完全陌生,我读过的教程并没有太大帮助——它们似乎都有语法错误,有时已经过时了。
angular - Angular 4 中的“Reducer”类型不是通用的
我对 Angular 很陌生,我的第一个项目是将 Angular 2 应用程序转换为最新版本。我被困在这个错误上:
另一个似乎相关的错误:
我不知道如何处理错误:“考虑用对导出函数的引用替换函数或 lambda”
我已将整个应用程序最小化为一个仍然会产生错误的模块:
这是我正在使用的软件(使用 npm outdated 命令)
其他依赖:
我已经用谷歌搜索并尝试过,但没有解决方案。好奇你怎么想!
c# - ngrx store - 正确更新数组。
我在我的应用程序中使用 ngrx/store,但无法保存数组。我的数组在启动时设置为空:
我正在尝试使用以下函数手动为其提供两个 CustomObjects 的数组:
调用此函数会调度对我的 reducer 函数的调用:
export const mainReducer: ActionReducer = (state: AppState, action: Action) => {
}
这一切看起来都很好,但是我的主要应用程序组件的数组没有得到这两个对象。如果我手动将默认状态设置为具有这两个 CustomObjects,那么它就可以工作(我不能这样做,因为我需要能够随时更新数组)。我的 HomeComponent 使用:
我已经分析了我的对象,我希望看到“this.customObjects$”最终成为两个 CustomObjects 的数组。相反,它是一个 ScalarOservable:
ScalarObservable {_isScalar: true, value: undefined, scheduler: null} 等等等等。
注意 - 我不确定是否需要,但我已将 ChangeDetectionStrategy.onPush 包含在我的主组件的 @Component 部分中。我也确保使用
在我的 app.module 类中。
有谁知道我做错了什么以及为什么 'this.customObjects$' 不是两个对象数组?我是 ngrx/store 的新手——我觉得我的 reducer 函数设置数组的方式存在问题,但我不确定。
angular - NGRX 和子组件的状态管理
目前正在重构 Angular 应用程序以使用 ngrx 存储并有两个选项。这是我们应用程序的基本结构。我相信大多数 Angular 应用程序都是以相同的方式构建的:
ContainerComponent 已注入Store<AppState>
。我要解决的问题是 GrandGrandChildComponent(例如,DropDownMenu 组件)必须根据应用程序的状态更改其行为(即在商店中发生的某些条件下禁用某些菜单项)并在单击时发出事件在菜单项上,以便ContainerComponent
(或任何其他组件,不是必需的祖先)可以对其做出反应。
有几种解决方法:
@Input
使用/在组件之间进行通信@Output
- 注入
Store
任何需要知道状态的组件
选项 1 是我在文档中读到的最常见/推荐的模式。所以只有 ContainerComponent 是胖的,所有的孩子都是瘦的/笨的,并且依赖于通过@Input
.
但据我所知,这种方法添加了很多样板文件,您必须添加不必要的属性才能将状态传递给 Grand Child 组件。而且它还打破了关注点分离原则,因为任何中间组件都必须知道下面的组件需要什么。而且,如果它知道只有 Grand Components 上可用的详细信息,则制作通用组件并不容易。
另一方面,方法 2 似乎解决了分离关注点的问题,而且它似乎也是更清洁的实现。但由于我在使用redux
模式方面相对较新,所以我不确定这是否是正确的方法,也许我不知道当我在重构方面过于深入时可能会遇到任何陷阱。
IMO,这两种方法都提供了一种简单的方法来测试每个组件,这对我来说非常重要。
我很怀疑采取哪种方法。我应该注意哪些陷阱?
谢谢
angular - 如何调度具有当前状态值的动作?
我有一个角度组件显示列表中的项目。每个 itemn 都可以被选中,并且选中的 item 的 id 将被存储在 state 中。所以我的状态对象看起来像这样:
现在我得到了一个名为DeleteSelectedAction
作为selected
有效负载的动作。此操作将使用效果调用某些 WebAPI,依此类推。
现在我找到了两种方法可以做到这一点。
第一:从商店中选择selected
并订阅它并通过操作传递值
第二:不向操作传递任何值,但获取selected
有效的
我不喜欢第一种方式,因为我需要使用订阅并且需要正确取消订阅。第二种方法是可以的,但只有当动作有副作用时。所以现在我正在寻找第三种方法。在我看来,这种方式如下所示:
我怎么能用 rxjs 运算符得到类似的东西?