加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 角度JS – 在非依赖服务之间进行通信

发布时间:2020-12-17 09:29:41 所属栏目:安全 来源:网络整理
导读:我是新的有角度,遇到一个catch-22: 事实: 我有一个服务记录我的东西(我的记录器). 我已经替换了$ExceptionHandler(有角度),我自己的实现将未捕获的异常转发给我的logger服务 我有另一个服务,推送服务,需要在使用’my-logger’在我的应用程序中记录一个致命
我是新的有角度,遇到一个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如有兴趣).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读