我正在使用 socket.io 向 Angular 控制器发送一个事件,该控制器为模态模板设置文本内容。
如果我还想在modal()
触发该事件时调用一个方法,我应该在控制器中执行此操作,还是应该在指令中执行此操作?
如果是后者,我应该直接在指令内监听 socket.io 事件,还是应该从控制器广播一个单独的事件?
我正在使用 socket.io 向 Angular 控制器发送一个事件,该控制器为模态模板设置文本内容。
如果我还想在modal()
触发该事件时调用一个方法,我应该在控制器中执行此操作,还是应该在指令中执行此操作?
如果是后者,我应该直接在指令内监听 socket.io 事件,还是应该从控制器广播一个单独的事件?
我通常采用 Brian Ford在这里描述的方法。
我最终选择了后者,通过依赖注入结合使用了 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')
. 那里有一些冗余,但它有助于加强以前不存在的一致性水平。
如果有人对这种技术的相对有效性或无效性有意见,我很想听听!