关于javascript:Angular单页应用程序中具有多个侦听事件的路由的SignalR

SignalR in an Angular single page application with multiple routes listening for events

我有一个Angular应用程序,其中某些路由侦听某些SignalR消息,而某些消息则由多个路由侦听。一切正常,但是当我从路线A导航到路线B时,仍然会触发SignalA事件的路线A处理函数。我正在使用Angular服务来packageSignalR集线器并跟踪回调函数。我考虑过仅在每次路由更改时都重置回调函数数组,但是我觉得这样做不是正确的方法。假设只有一个集线器连接和特定于路由的事件处理,那么执行此操作的合适方法是什么?

Angular SignalR服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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);
    }


}]);

我在这里找到了使用$on$emit的出色示例:http://sravi-kiran.blogspot.com/2013/09/ABetterWayOfUsingAspNetSignalRWithAngularJs.html

当前试图找到一种更好的方式来注入$ .connection或集线器代理依赖项。...


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