2013-03-16 2 views
12

Я добавляю функциональность websocket в наше угловое приложение. Объект Websocket завернут в службу. В идеале мы хотели бы наш обернутый объект сокета иметь стандартный API событий, так что мы можем использовать его в контроллере, как следующее: (Извините за CoffeeScript)Какова наилучшая практика для разработки событий в приложениях 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 

Что лучшая практика/библиотека для нас, чтобы достичь это? Использовать jquery? Backbone.Events? Любое предложение будет полезно. Благодаря!

ответ

19

Для этого вам не нужно использовать какую-либо библиотеку, просто создайте службу, введите $ rootscope и опубликуйте события оттуда до корневого каталога, затем в вашем контроллере прослушайте это событие.

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

Благодарим за ответ fastreload, однако это не совсем то, что мне нужно. В моем примере контроллер имеет возможность отказаться от подписки на сообщение сокета только для себя, в другом предложении подписка касается детализации контроллеров - каждый контроллер может решить, когда подписаться и когда отказаться от подписки. Мысли? – KailuoWang

+0

О, тогда, обновил мой ответ –

+0

Спасибо fastreload. Это не плохое решение. – KailuoWang

Смежные вопросы