SignalR в одностраничном приложении Angular с несколькими маршрутами, прослушивающими события

У меня есть приложение Angular, в котором определенные маршруты прослушиваются для определенных сообщений SignalR, а некоторые сообщения прослушиваются несколькими маршрутами. Все работает нормально, но когда я перехожу от маршрута A к маршруту B, функции обработчика маршрута A для событий SignalR все еще запускаются. Я использую службу Angular для переноса концентратора SignalR и отслеживания функций обратного вызова. Я думал просто сбросить массив функций обратного вызова при каждом изменении маршрута, но у меня такое чувство, что это неправильный способ сделать это. Учитывая, что должно быть только одно соединение с концентратором и обработка событий для конкретного маршрута, как это сделать?

Служба Angular SignalR

app.factory('SignalRService', [function () {

    var eventCallbacks = [];

    var entityHub = $.connection.entityHub;

    entityHub.client.event = function (payload) {
        angular.forEach(eventCallbacks, function (callback, idx) {
            callback(payload);
        });
    };

    $.connection.hub.start({ transport: 'longPolling' })
        .done(function () {  })
        .fail(function () {  });

    return {
        subscribeToEvent: subscribeToEvent
    };

    function subscribeToEvent(callback) {
        eventCallbacks.push(callback);
    }


}]);

person Jeff Swensen    schedule 20.11.2013    source источник


Ответы (2)


Лучшее решение выглядит как рефакторинг для использования комбинации $rootScope.$on и $emit здесь: https://stackoverflow.com/a/19498009/100776

person Jeff Swensen    schedule 20.11.2013

Я нашел отличный пример использования $on и $emit здесь: http://sravi-kiran.blogspot.com/2013/09/ABetterWayOfUsingAspNetSignalRWithAngularJs.html

В настоящее время пытаюсь найти лучший способ внедрить зависимость $.connection или прокси-сервера концентратора....

person Jason Capriotti    schedule 10.12.2013