2

我正在使用 socket.io 向 Angular 控制器发送一个事件,该控制器为模态模板设置文本内容。

如果我还想在modal()触发该事件时调用一个方法,我应该在控制器中执行此操作,还是应该在指令中执行此操作?

如果是后者,我应该直接在指令内监听 socket.io 事件,还是应该从控制器广播一个单独的事件?

4

2 回答 2

2

我通常采用 Brian Ford在这里描述的方法。

于 2013-04-12T01:20:16.177 回答
2

我最终选择了后者,通过依赖注入结合使用了 socket.io(如 rgaskill 的回答中所引用,然后在指令中对套接字事件本身做出反应,如下所示:

angular.module('MyApp.directives', [])
  .directive('modal', function(socket) {

    return function($scope, element, attrs) {
      socket.on('showInfo', function(event, msg){
        element.modal('show');
      });

    };
  });

编辑

此处快速更新:出于长期组织的考虑,我最终将所有socket侦听器都放在了我的控制器中,而不是将它们散布在控制器和指令中。当我需要侦听指令中的事件时,我$scope.$broadcast('eventName')在控制器的套接字侦听器中使用 angular 将事件广播到指令,然后用$scope.$on('eventName'). 那里有一些冗余,但它有助于加强以前不存在的一致性水平。

如果有人对这种技术的相对有效性或无效性有意见,我很想听听!

于 2013-04-12T02:12:38.017 回答