我正在使用socket.io将事件发送到Angular控制器,该控制器设置模态模板的文本内容。
如果我还想在触发该事件时调用modal()
方法,我应该在控制器内执行此操作,还是应该在指令中执行此操作?
如果是后者,我应该直接在指令中监听socket.io事件,还是应该从控制器广播一个单独的事件?
答案 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')
捕获它们。那里有一些冗余,但它有助于实现以前不存在的一致性水平。
如果有人对此技术的相对有效性或无效性有所了解,我很乐意听到它!