Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 角度JS – 在非依赖服务之间进行通信大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是新的有角度,遇到一个catch-22:

事实:

>我有一个服务记录我的东西(我的记录器).
>我已经替换了$ExceptionHandler(有角度),我自己的实现将未捕获的异常转发给我的logger服务
>我有一个服务,推送服务,需要在使用’my-logger’在我的应用程序中记录一个致命的消息时被通知.

问题:

我不能让“我的记录器”依赖于“推送者”,因为它将创建循环依赖(“推送者”使用$http.圆圈:$ExceptionHandler – > my-logger – > push – > $http – > $ExceptionHandler …)

我的尝试:

为了使这两个服务相互通信,我想使用$watch on the pusher-service:在$rootscope上观察将在my-logger中更新的属性.
但是,当尝试在“my-logger”中使用$rootScope时,为了更新“pusher”“看”的属性,我无法执行循环依赖,因为$rootscope取决于$ExceptionHandler(圆圈:$ExceptionHandler – > my-logger – > $rootScope – > $ExceptionHandler).

试图找到在运行时获取在其上下文“my-logger”服务中的范围对象的选项.找不到这样的选择.

也不能使用广播,因为它需要我的记录器来访问范围($rootScopE),这是不可能的,如上所述.

我的问题:

有没有一个有角度的方式让两个服务通过第三方实体进行通信?

任何想法如何解决

使用作为通知/ pubsub服务的第三个服务:
.factory('Notificationservice',[function() {
    var event1serviceHandlers = [];
    return {
        // publish
        event1Happened: function(some_data) {
            angular.forEach(event1serviceHandlers,function(handler) {
                handler(some_data);
            });
        },// subscribe
        onEvent1: function(handler) {
            event1serviceHandlers.push(handler);
        }
    };
}])

以上,我只显示一个事件/消息类型.每个附加事件/消息将需要自己的数组,发布方法订阅方法.

.factory('service1',['Notificationservice',function(NotificationservicE) {
    // event1 handler
    var event1Happened = function(some_data) {
        console.log('S1',some_data);
        // do something here
    }
    // subscribe to event1
    Notificationservice.onEvent1(event1Happened);
    return {
        someMethod: function() {
           ...
           // publish event1
           Notificationservice.event1Happened(my_data);
        },};
}])

service2的编码方式与service1类似.

请注意,如果这种方法不使用$rootScope,$broadcast和Scopes,因为它们不需要与服务间通信.

通过上述实现,服务(一旦创建)在应用程序的使用期间保持订阅.您可以添加处理取消订阅方法.

在我目前的项目中,我使用相同的Notificationservice来处理控制器范围的pubsub. (见Updating “time ago” values in Angularjs and Momentjs如有兴趣).

大佬总结

以上是大佬教程为你收集整理的angularjs – 角度JS – 在非依赖服务之间进行通信全部内容,希望文章能够帮你解决angularjs – 角度JS – 在非依赖服务之间进行通信所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。