服务和指令之间的通信:依赖关系或或事件
communication between service and directive: dependency or or events
问题:有多个指令与服务/工厂通信,服务/工厂与服务器通信/记录操作。我是否应该将它们之间的关系声明为依赖关系
angular.module('someModule', [])
.directive('someDir', ['logger', function ( logger ) {
//...
}])
.service('logger', ['$http', function( $http ){
//...
}]);
还是基于事件的关系?
angular.module('someModule', [])
.directive('someDir', ['$rootScope', function ( $rootScope ) {
$rootScope.$emit('someEvent');
// ...
}])
.service('logger', ['$http', '$rootScope', function( $http, $rootScope ){
$rootScope.$on('someEvent', function(){
// ...
});
// ...
}]);
我猜除了脱钩之外,还有什么优点和缺点?
使用事件有一些明显的优势:
- 解耦是您突出显示的第一个。
- 事件允许我们将来添加更多订阅者。例如,在
someEvent
上,您不仅要记录某些内容,还要执行其他操作,然后创建一个订阅者来处理新方案。
事件确实有一些缺点:
- 执行不再是线性的,因此调试变得有点困难。太多的事件和调试可能会成为一场噩梦。
- 这也会影响代码的可读性,因为仅通过读取部分代码就不确定到底发生了什么。
- 我们不应该依赖于事件的执行顺序。如果我们想要有序执行事件是不合适的。
我个人使用事件来处理不属于主要流程流的场景。日志记录是此类功能的一个很好的例子。
相关文章:
- 单元测试依赖关系没有被嘲笑
- FRP 中 EventStreams 的循环依赖关系
- 节点模块依赖关系
- 在Meteor中使用具有依赖关系的NPM包
- requirejs定义:嵌套依赖关系
- Django管道和javascript依赖关系
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- Npm未满足对等依赖关系
- Node.JS处理重复的可传递依赖关系
- 在Firefox上使用聚合物的javascript依赖关系的HTML导入困难;Safari
- 库中的匿名定义()模块's的依赖关系导致库损坏'的家属
- 使用Require.js按照依赖关系的顺序加载JavaScript
- GraphQL代码中的Javascript循环依赖关系
- 使用 grunt 检查单个 javascript 文件时如何解决依赖关系
- 与超类的依赖关系
- 在 Angular JS 业力测试中管理依赖关系
- 在 webpack 中管理 jQuery 插件依赖关系
- requirejs+bower,bower组件中的路径和依赖关系
- 预构建的NPM包:如何为用户省去依赖关系
- 聚合物种子-自定义元素依赖关系