Angular单页面应用程序中的SignalR,具有多个侦听事件的路径

时间:2013-11-20 17:33:51

标签: javascript angularjs signalr

我有一个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);
    }


}]);

2 个答案:

答案 0 :(得分:1)

最佳解决方案看起来像是在此使用$rootScope.$on$emit组合的重构:https://stackoverflow.com/a/19498009/100776

答案 1 :(得分:1)

我在这里使用$on$emit找到了一个很好的例子:http://sravi-kiran.blogspot.com/2013/09/ABetterWayOfUsingAspNetSignalRWithAngularJs.html

目前正在尝试寻找更好的方法来注入$ .connection或hub代理依赖....