我使用socket.io向Angular控制器發送事件,該控制器設置模態模板的文本內容。AngularJS + Socket.io:觸發模式的套接字事件 - 在指令或控制器中?
如果我還想在事件被觸發時調用modal()
方法,應該在控制器內部執行此操作,還是應該在指令內部執行此操作?
如果是後者,我應該直接在指令中偵聽socket.io事件,還是應該從控制器廣播一個單獨的事件?
我使用socket.io向Angular控制器發送事件,該控制器設置模態模板的文本內容。AngularJS + Socket.io:觸發模式的套接字事件 - 在指令或控制器中?
如果我還想在事件被觸發時調用modal()
方法,應該在控制器內部執行此操作,還是應該在指令內部執行此操作?
如果是後者,我應該直接在指令中偵聽socket.io事件,還是應該從控制器廣播一個單獨的事件?
我結束了使用包括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')
來捕獲它們。在那裏有一些冗餘,但它有助於強化以前不存在的一致性水平。
如果有人對此技術的相對有效性或無效性有所投入,我很樂意聽到它!
我通常採用了布賴恩福特here描述的方法。
在他的例子中,我沒有看到通過套接字觸發的任何DOM動作,所以我不知道如何繼續。 Upvote,因爲我在他的例子中利用了依賴注入,並最終自己想出了它。 – Jon