Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 服务内部角度变化检测_Angular_Angular Services_Angular Changedetection - Fatal编程技术网

Angular 服务内部角度变化检测

Angular 服务内部角度变化检测,angular,angular-services,angular-changedetection,Angular,Angular Services,Angular Changedetection,我正在做一个角度的应用程序。我需要监听一个服务中的数据集(javascript对象)中的更改 我熟悉Angular的KeyValueDifferences(对象上的侦听器)和IterableDiffers(数组上的侦听器)。如果我想听角度分量内部的变化,那么: 我将通过实现NgDoCheck方法,在我的组件中实现DoCheck接口 我将初始化keyvaluedifferences和/或IterableDiffers并在NgDoCheck方法中检查更改 然而,这种技术在Angular服务中不起作用

我正在做一个角度的应用程序。我需要监听一个服务中的数据集(javascript对象)中的更改

我熟悉Angular的
KeyValueDifferences
(对象上的侦听器)和
IterableDiffers
(数组上的侦听器)。如果我想听角度分量内部的变化,那么:

  • 我将通过实现
    NgDoCheck
    方法,在我的组件中实现
    DoCheck
    接口

  • 我将初始化
    keyvaluedifferences
    和/或
    IterableDiffers
    并在
    NgDoCheck
    方法中检查更改

  • 然而,这种技术在Angular服务中不起作用,因为服务不实现DoCheck接口(DoCheck不是服务生命周期的一部分)


    所以,我的问题是,如何在角度服务中听到对象/数组的变化?

    你不能。从这一事实出发,相应地加以发展。组件有责任通过可观察到的或方法调用通知服务更改。服务可以获取组件的ChangeDetectorRef,但前提是它是组件的提供者,并且视情况而定,这可能被视为反模式。考虑进一步解释你的案例,如果你对替代解决方案感兴趣,请提供。answer@Phil如果可能的话,我会尽量坚持建设性的回答。我想答案应该包括这些信息,并提供解决问题的可能方法。OP的反馈在这一点上很有价值。@estus,谢谢你的评论。实际上,我通过在组件内部实现我在问题中编写的模式来解决这个问题,当组件注意到更改时,组件调用服务中的方法。但我想问的是,我是否可以避免在这个流程中涉及组件;基本上是一种反模式。这就是组件的用途。这是否可能取决于您的代码。如果它是本地提供商,那么它就是。如果它是来自父注入器的提供程序,则不是。