2013-04-11 3 views
2

저는 modal 템플릿의 텍스트 내용을 설정하는 각도 컨트롤러에 이벤트를 보내려면 socket.io를 사용하고 있습니다.AngularJS + Socket.io : 지시어 또는 컨트롤러 내부에서 모달을 트리거하는 소켓 이벤트?

해당 이벤트가 발생할 때 modal() 메서드를 호출하려면 컨트롤러에서이 작업을 수행해야합니까? 아니면 지시문 내에서 처리해야합니까?

후자라면 directive에서 직접 socket.io 이벤트를 수신해야합니까? 아니면 컨트롤러에서 별도의 이벤트를 브로드 캐스트해야합니까?

답변

2

나는과 같이, 지시어의 소켓 이벤트 자체에 반응 다음 rgaskill의 대답에 참조 된 (의존성 주입을 통해 socket.io를 포함하여, 그리고 조합을 사용하여 후자로가는 결국 :

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

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

    }; 
    }); 

여기에 빠른 업데이트를

편집 :. 장기 조직을 위하여, 내가 이벤트를 수신하기 위해 필요한 경우 컨트롤러 및 지침 모두에 걸쳐 그들을 뿌리는 대신 내 컨트롤러 내부에 내 socket 청취자의 모든 퍼팅 결국 지위에 컨트롤러의 소켓 리스너 내에서 angular의 $scope.$broadcast('eventName')을 사용하여 이벤트를 지시문에 브로드 캐스팅 한 다음 지시문을 $scope.$on('eventName')으로 잡았습니다. 거기에 약간의 중복성이 있었지만 이전에는 없었던 수준의 일관성을 유지하는 데 도움이되었습니다.

누구든지이 기술의 상대적 효과 또는 비효율에 대해 의견이있는 경우 듣고 싶습니다.

2

나는 일반적으로 브라이언 포드 here에 의해 설명 된 접근 방식을 취했습니다.

+0

그의 예제에서 소켓을 통해 트리거 된 DOM 동작이 표시되지 않아 진행 방법을 잘 모르고있었습니다. Upvote, 내가 그의 예에서 의존성 주입을 활용하고 궁극적으로 스스로 알아 냈습니다. – Jon

관련 문제