大佬教程收集整理的这篇文章主要介绍了angularjs – 角度JS – 在非依赖服务之间进行通信,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
事实:
>我有一个服务记录我的东西(我的记录器).
>我已经替换了$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),这是不可能的,如上所述.
我的问题:
有没有一个有角度的方式让两个服务通过第三方实体进行通信?
任何想法如何解决?
.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); },}; }])
请注意,如果这种方法不使用$rootScope,$broadcast和Scopes,因为它们不需要与服务间通信.
通过上述实现,服务(一旦创建)在应用程序的使用期间保持订阅.您可以添加处理取消订阅的方法.
在我目前的项目中,我使用相同的Notificationservice来处理控制器范围的pubsub. (见Updating “time ago” values in Angularjs and Momentjs如有兴趣).
以上是大佬教程为你收集整理的angularjs – 角度JS – 在非依赖服务之间进行通信全部内容,希望文章能够帮你解决angularjs – 角度JS – 在非依赖服务之间进行通信所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。