У меня есть приложение 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);
}
}]);