【问题标题】:Replacing SignalR callbacks doesn't work替换 SignalR 回调不起作用
【发布时间】:2013-04-05 11:49:35
【问题描述】:

更新:我进一步简化了错误案例,并在 SignalR 的 GitHub 页面上提交了一个问题。您可以在此处查看问题:https://github.com/SignalR/SignalR/issues/1828。其实这个bug和AngularJS无关。

我有一个项目,它在后端使用 ASP.NET 和 SignalR,并在前端使用 AngularJS。一切正常,除了当我在 AngularJS 中移动并且再次创建控制器时,它们无法替换原始 SignalR 回调方法。

这是我的控制器的代码:

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'];

在我第一次访问这个控制器时,我可以发送和接收消息,并且我所有的 Angular 绑定都可以正常工作。我的控制台有输出:

Callback set on Fri Apr 05 2013 14:37:13 GMT+0300 (E. Europe Daylight Time): First page load controllers.js:37

这一切都很好,花花公子。移动到另一个页面并再次访问 SignalRProblemCtrl 后会出现问题。这次我可以发送和接收消息,消息被写入控制台但我的绑定不会更新。控制台中的输出指向根本原因:

Callback set on Fri Apr 05 2013 14:37:13 GMT+0300 (E. Europe Daylight Time): Second page load controllers.js:37

所以我的绑定不会更新,因为在第二次创建控制器时第一个回调不会被替换。所有 SignalR 消息仍会转到具有控制器前一个实例的 $scope 的第一个回调,因此我的视图不会使用最新消息进行更新。

这是为什么?为什么 SignalR 坚持第一次回调?

PS。我也尝试立即更换回调。使用此代码,可以正确使用最新的回调(带有 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);
    });
};

【问题讨论】:

标签: signalr


【解决方案1】:

在 Github (https://github.com/SignalR/SignalR/issues/1828) 上提交问题后,我收到了关于如何解决此问题的评论。

您可以查看解决方案:Signalr (1.0.0-alpha2) Hubs - Can you add client functions after connection has been started?

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2018-04-27
    • 2018-03-15
    • 2015-02-21
    相关资源
    最近更新 更多