我需要建议,我需要服务中存储的数据(我的服务使用Angulartics将数据发送到Google Analytics(分析)。我将所有需要的数据作为对象存储在存储中,这更好:
此外,我会在获取服务信息时调度操作。我如何创建商店字段侦听器? (在此字段未定义时获取数据)
答案 0 :(得分:2)
对我来说,这是使用@ngrx/effects的好时机。如果您已经在使用@effects
,那么利用它应该不会太困难。如果不是这样,您可能必须采用的一般模式是将将数据(即副作用,如异步服务调用)加载到效果文件的Service调用。然后,您可以执行类似的操作来跟踪分析事件。它具有上面提到的好处,可以在一个地方进行跟踪。
@Effect({ dispatch: false })
trackEvents = this.actions.pipe(
ofType(...),
tap(({ type, payload }) => {
// make call to Angulartics
this.angulartics2.eventTrack.next({
action: type,
properties: { ...payload },
});
})
)
已剪切的代码是从https://blog.angularindepth.com/start-using-ngrx-effects-for-this-e0b2bd9da165#8a65复制的。
答案 1 :(得分:0)
第一种方法很有意义,它将逻辑放在一个地方。您需要做的是订阅服务中的商店更改,然后将其发送到分析服务:
您可以将Store服务注入到您的服务中。使用store.select选择状态片:
在服务的构造函数中,您可以像这样订阅对象中的更改:
this.store.select('keyName').subscribe( (data)=> {
// do whatever you want with this data
});
答案 2 :(得分:0)
我阅读了这篇文章https://brianflove.com/2017/11/01/ngrx-anti-patterns/,并设法不明确地订阅组件或服务,也不使用任何效果。 第一步是使服务方法侦听过滤器更改,通过管道将数据传递到http请求,然后使用该数据调度事件并返回可观察到的结果
StatusBarNotification
第二步是将结果传递给组件中的可观察对象:
StatusBarNotification