angularjs – 角度JS – 在非依赖服务之间进行通信
我是新的有角度,遇到一个catch-22:
事实: >我有一个服务记录我的东西(我的记录器). 问题: 我不能让“我的记录器”依赖于“推送者”,因为它将创建循环依赖(“推送者”使用$http.圆圈:$ExceptionHandler – > my-logger – > push – > $http – > $ExceptionHandler …) 我的尝试: 为了使这两个服务相互通信,我想使用$watch on the pusher-service:在$rootscope上观察将在my-logger中更新的属性. 试图找到在运行时获取在其上下文“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如有兴趣). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 用CXF3.0.4创建webservice的时候jdk1.6版本报的错,解决方案
- Angular2 – 错误:无法解析IconService的所有参数
- 前端开发学习系列之一:准备工作
- scala转换Int => Seq [Int]到Seq [Int => Int]
- angularjs – Angular Material不会应用样式
- twitter-bootstrap – Bootstrap – 我可以将行加到12以上吗
- bootstrap框架下的selectpicker搜索实现根据搜索内容去后台
- Unix shell命令的一般语法是什么?
- Bootstrap jquery toggle 无效的解决办法
- 在WebService中实现window身份验证的功能