问题标签 [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 store 注入到库中
我正在创建一个拖放角度模块,希望将其外部化并发布到 npm。该库本质上将允许用户定义拖放区域并将 ngrx 操作与它们相关联。
然后,提供的服务将分派由规则产生的操作。
我的问题是我需要将此库与消费者的商店集成。有没有办法通过一些静态模块方法提供ngrx商店或以某种方式在幕后将它链接到我的商店? DndModule.provideStore(???)
我不确定这在幕后会是什么样子
angular - ngrx/store 效果嵌套对象
我正在学习 Angular 2,我正在尝试使用 ngrx/store,但是在某些特殊情况下我遇到了一些困难。
示例 我正在尝试删除父对象。我想要做的是删除子对象。
这是我的实体:
我正在使用 normalizr 来展平我的状态,所以我存储的讨论将如下所示:
我有 3 个减速器,一个用于讨论,另一个用于帖子,最后一个用于评论。所有 reducer 都处理它自己类型的 delete Action。这是讨论减速器的示例:
我的动作是这样的:
当我删除讨论时,我想删除与讨论相关的帖子,帖子效果将删除与已删除帖子相关的评论。我使用了ngrx的效果,所以我使用了这个效果:
我的问题是如何从讨论 ID 中删除帖子?
谢谢阅读。
angular - 错误:没有商店的提供者!在使用 Angular 4.0 尝试 @ngrx/store 时
问题: 错误:没有商店的提供者!
我在 main.ts 中引导存储模块:
并注入vehicle.component.ts:
完整的源代码在这里:GitHub ,在 GitHub Pages上运行的最后一个版本
PS。将 Store 添加到提供程序会导致另一个错误:Can't resolve all parameters for Store: (?, ?, ?)。
angular - 使用效果时,动作应该在组件中分发还是在商店中分发?
我在摸摸 echoes -player 的代码,里面的效果用的很干净,有一个效果player-dearch.effects
就是监听PlayerSearchActions.SEARCH_MORE_FOR_QUERY
,这个效果依次调用服务searchMore
中。youtube.search
有趣的部分是动作searchMoreForQuery
是从youtube-videos.component
.
问题:有人说最好将调度功能移至“youtube.search”服务,然后从youtube-videos.component
. 那真的是更好的设计吗?有什么建议可以改进吗?
angular - Angular 2 - 如何保持模板渲染直到从@ngrx/store 收到数据?
在我的 ngOnInit 函数中(在 vehicle.component.ts 中),我从服务器接收数据,然后将该车辆数组发送到 Store。之后,我订阅了商店数据以查找车辆。但是当我调用vehicle.find()时,我的模板已经呈现错误 - 当然没有找到车辆......我应该怎么做才能解决这个问题?
}
我的模板(vehicle.component.html):
完整的源代码在这里:GitHub ,在 GitHub Pages上运行的最后一个版本
附言
要重现错误,您应该导航到车辆信息页面并按 F5。不在ghpages上复制,它只是崩溃)
javascript - @ngrx/effects BehaviourSubject 为订阅者提供最后的价值
前几天我注意到了一些事情。我正在订阅Actions
里面的流@ngrx/effects
。我注意到(对我来说是一个问题)订阅Actions
迟到的组件接收最后一个调度的操作。我可以看到这是因为内部的调度@ngrx/store
程序是 aBehaviourSubject
并引用了 RxJS 文档:
Rx.BehaviorSubject 类
表示随时间变化的值。观察者可以订阅主题以接收最后(或初始)值和所有后续通知。
不幸的是,我想订阅操作流而不检索最后一个值。它给我带来了一些问题,比如当用户返回页面时显示错误消息。
BehaviorSubject
和Subject
(我想要的方式)之间的区别在这里演示:
https://codepen.io/anon/pen/zwgype
有没有办法做到这一点?
javascript - @Ngrx/store:如何查询具有关系的模型
我是一个使用 Redux(使用 @ngrx/store)的 Angular 2 应用程序,我以这种方式对商店进行了建模:
基本上,我有两种类型的对象:modelA 和 modelB。这暂时没问题。但是我找不到哪种方法是编写两者之间关系的最佳方式,表示类似modelA的东西有很多modelB(一对多)。我可以做这样的事情吗?
这是商店的根目录,它不是来自“modelA”的孩子。这可能有效,但是我将如何使用@ngrx/store 方法从特定模型A“查询”模型B?因为如果我编写一个读取全局状态并从 modelAmodelB 返回部分状态的选择器函数,则在编写函数时我无法访问其余状态。例子:
我可以使用 Observable.combineLast 查询这个
但我不知道这是否正确:每当我更改 modelA 实体对象(例如添加一个新对象)时,都会调用 subscribe(),但输出是相同的,因为 modelA 实体和它的 modelB 都没有改变相关对象。
PS:我可以这样查询
但我不知道这是否是最好的方法。
hashmap - 当你有带 id 的数据时,你如何使用 ngrx/store?
假设我们有一个包含 100 个英雄的列表。每个英雄都有一个 id 和一个 name 属性,所以 hero 模型将是:
我想使用带有哈希映射(字典)数据结构的 ngrx/store 来快速访问单个英雄。所以 hero-store 会有这个结构Observable<{[heroId: string]: Hero}>
。
然后在我的hero-component
我想通过 id 加载英雄,所以它看起来像:
在控制器中:
这可行,但对我来说似乎并不理想,因为当仅更新一个英雄时,在所有 100 个组件中都会触发订阅侦听器。
- 这对性能有负面影响吗?
- 还有比这更好的方法吗?
我想过把Observable<Hero>
它放进商店而不是Hero
让商店看起来像Observable<{[heroId: string]: Observable<Hero>}>
然后是这样的:
将是可能的。但是话又说回来,这似乎有点疯狂。建议的解决方法是什么?或者更具体地说:您如何使用 ngrx/store 处理哈希映射资源存储?
angular - 如何获取存储并将其分配给间谍变量
我有两个文件: x.component 和 x.service
x.service.ts
x.component.ts
测试x.component
我收到一个错误cannot subscribe of undefined
。在x.spec.ts
我使用 x.service.spy.ts 的地方
如您所见,我没有初始化它,因为我不能使用类似store$: Store<DogsStore> = new Store()
. 如何获取商店并将其分配给变量?也许还有其他问题可以做到这一点?
javascript - 使用路由之间共享的数据填充 ngrx 存储
我有一个跨越多条路线的多页表格。所有路由都需要通过 API 与它们共享相同的数据。我可以将 API 的响应存储在里面ngrx/store
,并使用效果触发 API 调用。我的问题更多关于在哪里启动 API 调用。一旦用户通过身份验证,就需要进行 API 调用,这发生在我点击的第一条路由上(在访问多页表单的第一部分之前)。我想出的两个选项是:
在每条路线的组件内触发效果意味着我每次访问路线时都必须请求信息。当用户未通过身份验证时,守卫将阻止所有页面的访问。
在 effect 中监听经过身份验证的成功操作,并向那里的 API 发出请求。
我敢肯定,两者都是完全可以接受的,并且各有取舍。能得到一些意见就好了!