服务和指令之间的通信:依赖或事件

时间:2014-12-08 08:34:51

标签: javascript angularjs module angularjs-directive

问题:有几个与服务/工厂通信的指令与服务器通信/记录操作。 我应该将它们之间的关系声明为依赖

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(){
            // ...
        });
        // ...
    }]);

除了,我想,脱钩有什么利弊?

1 个答案:

答案 0 :(得分:1)

使用事件有一些明显的优势:

  • 在您突出显示时,第一个去耦。
  • 活动允许我们在将来添加更多订阅者。例如,在someEvent上,您不仅要记录某些内容,还要执行其他操作,然后创建订阅者来处理新方案。

事件确实有一些缺点:

  • 执行不再是线性的,因此调试变得有点困难。太多的事件和调试都可能成为一场噩梦。
  • 这也会影响代码的可读性,因为您只是通过阅读部分代码来确定究竟发生了什么。
  • 我们不应该依赖事件的执行顺序。如果我们想要有序的执行事件是不合适的。

我个人使用事件来处理不属于主要流程的场景。记录是这种功能的一个很好的例子。