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

communication between service and directive: dependency or or events

本文关键字:依赖 关系 事件 通信 指令 之间 服务      更新时间:2023-09-26

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

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上,您不仅要记录某些内容,还要执行其他操作,然后创建一个订阅者来处理新方案。

事件确实有一些缺点:

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

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