2013-03-16 12 views
12

Dodaję funkcjonalność websocket do naszej aplikacji kątowej. Obiekt Websocket jest opakowany w usługę. Idealnie chcielibyśmy naszą owinięte obiekt gniazdo mieć standardowego API zdarzeń, dzięki czemu można go używać w sterowniku jak następuje: (Przepraszamy za coffeescript)Jaka jest najlepsza praktyka w tworzeniu aplikacji sterowanych zdarzeniami w aplikacjach Angular.js?

angular.module('myApp').controller 'myCtrl', ($scope, socket) -> 
    update = (msg)-> 
    $scope.apply -> 
     #do something regarding to the msg 

    socket.on 'message', update 

    unregister: -> 
    socket.off 'message', update 

Jaka jest praktyka/biblioteki dla nas, aby osiągnąć najlepszy to? Użyj jquery? Backbone.Events? Każda sugestia będzie pomocna. Dzięki!

Odpowiedz

19

Nie musisz używać żadnej biblioteki, aby to osiągnąć, po prostu stwórz usługę, wstrzyknij $ rootscope i opublikuj zdarzenia z tego miejsca do rootscope, a następnie w swoim kontrolerze posłuchaj tego zdarzenia.

var socket; // this be the socketio instance. 
angular.module("myApp").factory("SocketHandler", function ($rootScope) { 
    var handler = function (msg) { 
    $rootScope.$apply(function() { 
     $rootScope.$broadcast("socketMessageReceived", msg); 
    }); 
    }; 

    socket.on("message", handler); 

    $rootScope.$on("unregisterSocket", function() { 
    socket.off("message", handler); 
    }); 
}).controller("myCtrl", function ($scope, SocketHandler) { 
    var listener; 
    var addListener = function() { 
    listener = $scope.$on("messageReceived", function (e, msg) { 
     console.log("New Message: " + msg); 
    }); // $on returns a registration function for the listener 
    }; 
    var removeListener = function() { 
    if (listener) listener(); 
    }; 
}); 
+0

Dziękuję za odpowiedź fastreload, jednak nie jest to dokładnie to, czego potrzebuję. W moim przykładzie kontroler może zrezygnować z subskrypcji tylko dla samego gniazda, w innym zdaniu subskrypcja dotyczy ziarnistości kontrolerów - każdy kontroler może zdecydować, kiedy subskrybować i kiedy się wypisać. Myśli? – KailuoWang

+0

Och, wtedy zaktualizowałem moją odpowiedź –

+0

Dzięki fastreload. To nie jest złe rozwiązanie. – KailuoWang

Powiązane problemy