AngularJS + Socket.io:在指令或控制器内触发模态的套接字事件?

时间:2013-04-11 23:59:15

标签: javascript angularjs socket.io

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

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

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

2 个答案:

答案 0 :(得分:2)

我通常采用Brian Ford所描述的方法here

答案 1 :(得分: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')来将事件广播到指令,然后使用$scope.$on('eventName')捕获它们。那里有一些冗余,但它有助于实现以前不存在的一致性水平。

如果有人对此技术的相对有效性或无效性有所了解,我很乐意听到它!