2013-03-16 19 views
12

Tôi đang thêm một số chức năng websocket vào ứng dụng góc của chúng tôi. Đối tượng Websocket được gói trong một dịch vụ. Lý tưởng nhất là chúng tôi muốn đối tượng ổ cắm bọc của chúng tôi để có một API kiện tiêu chuẩn để chúng tôi có thể sử dụng nó trong bộ điều khiển như sau: (Xin lỗi vì sự Coffeescript)Thực tiễn tốt nhất để phát triển sự kiện theo định hướng trong ứng dụng Angular.js là gì?

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 

thực hành/thư viện tốt nhất để chúng ta đạt được là gì điều này? Sử dụng jquery? Backbone.Events? Bất kỳ đề xuất nào đều hữu ích. Cảm ơn!

Trả lời

19

Bạn không cần sử dụng bất kỳ thư viện nào để đạt được điều này, chỉ cần tạo một dịch vụ, tiêm $ rootscope và xuất bản các sự kiện từ đó tới rootscope, sau đó trong trình điều khiển của bạn lắng nghe sự kiện đó.

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

Cảm ơn bạn đã trả lời câu trả lời nhanh, tuy nhiên đây không chính xác là những gì tôi cần. Trong ví dụ của tôi, bộ điều khiển có khả năng hủy đăng ký tin nhắn ổ cắm cho chính nó, trong một câu khác, đăng ký là mức độ chi tiết của bộ điều khiển - mỗi bộ điều khiển có thể quyết định thời điểm đăng ký và thời điểm hủy đăng ký. Suy nghĩ? – KailuoWang

+0

Sau đó, hãy cập nhật câu trả lời của tôi –

+0

Cảm ơn bạn đã tải nhanh. Đó không phải là một giải pháp tồi. – KailuoWang