Signalr 更换信号机回调不会';行不通

Signalr 更换信号机回调不会';行不通,signalr,Signalr,更新:我进一步简化了错误案例,并在SignalR的GitHub页面上提交了一个问题。您可以在此处看到问题:。实际上,这个bug与AngularJS无关 我有一个项目,它在后端使用ASP.NET和Signal,在前端使用AngularJS。除了我在AngularJS中移动并且再次创建控制器外,其他一切都正常工作,它们无法替换原始的信号器回调方法 以下是我的控制器的代码: function SignalRProblemCtrl($scope) { var bar = $.connection

更新:我进一步简化了错误案例,并在SignalR的GitHub页面上提交了一个问题。您可以在此处看到问题:。实际上,这个bug与AngularJS无关

我有一个项目,它在后端使用ASP.NET和Signal,在前端使用AngularJS。除了我在AngularJS中移动并且再次创建控制器外,其他一切都正常工作,它们无法替换原始的信号器回调方法

以下是我的控制器的代码:

function SignalRProblemCtrl($scope) {
    var bar = $.connection.bar;
    $.connection.hub.start();

    $scope.currentMessage = "";

    $scope.messages = [];
    $scope.messages.push("HELLO!");

    var date = new Date();
    bar.client.addMessage = function (message) {
        $scope.$apply(function () {
            console.log("Callback set on " + date + ": " + message);
            $scope.messages.push(message);
        });
    };

    $scope.send = function () {
        bar.server.send($scope.currentMessage, "Extra data");
    };

}
SignalRProblemCtrl.$inject = ['$scope'];
在我第一次访问这个控制器时,我可以发送和接收消息,并且我的所有角度绑定都可以正常工作。我的控制台有以下输出:

Callback set on Fri Apr 05 2013 14:37:13 GMT+0300 (E. Europe Daylight Time): First page load controllers.js:37
这一切都是美好的。在移动到另一个页面并再次访问SignalRProbleCtrl后,会出现此问题。这次我可以发送和接收消息,消息会被写入控制台,但我的绑定不会被更新。控制台中的输出指向根本原因:

Callback set on Fri Apr 05 2013 14:37:13 GMT+0300 (E. Europe Daylight Time): Second page load controllers.js:37
所以我的绑定不会得到更新,因为在第二次创建控制器时,第一个回调不会被替换。所有SignalR消息仍会转到第一个回调,该回调具有控制器上一个实例的$scope,因此我的视图不会用最新消息更新

为什么会这样?为什么信号员坚持第一次回叫

另外,我还尝试立即更换回拨。在这段代码中,正确使用了最新的回调(带有date2的回调)

var date = new Date();
bar.client.addMessage = function (message) {
    $scope.$apply(function () {
        console.log("Callback set on " + date + ": " + message);
        $scope.messages.push(message);
    });
};

var date2 = new Date();
bar.client.addMessage = function (message) {
    $scope.$apply(function () {
        console.log("Callback set on " + date2 + ": " + message);
        $scope.messages.push(message);
    });
};

在Github()上提交了一个问题后,我得到了关于如何解决这个问题的评论

您可以在以下位置查看解决方案:

可能重复的