javascript - Angular Controller 的频繁更新未反射(reflect)在 View 中

标签 javascript angularjs signalr

正在处理 Angular 的一个有趣问题,并经常从 SignalR 更新。

在服务器上,我有一个管理器的单例实例,当前设置为每 500 毫秒发送一次更新

    public void StartTest() {
        var i = 0;
        while (i < 1000) {
            if (_cancelRequested) {
                _cancelRequested = false;
                return;
            }
            _context.Clients.All.sent(i++);
            Thread.Sleep(500);            

在我看来,我正在使用“controller as vm”语法:

{{vm.status}}

终于在我的 Controller 中(在 signalR 初始化时):

    // Using 'Controller As' syntax, so we assign this to the vm variable (for viewmodel).
    var vm = this;
    vm.status = '';
    ...
    function activateSignal() {
        var hub = $.connection.mailerHub;

        hub.client.sent = function (counter) {
            log(' singal_R ## event: sent ' + counter);  // <-- this works on every update
            vm.status = counter;  // this works only on last update, or if stop is pressed it writes the most recent update. 
        };

该代码做了两件事:写入日志(这会向浏览器发送 toastr 更新),并在 Controller 上设置状态变量。

日志评论按预期反射(reflect)在浏览器中,每半秒我收到带有事件编号的漂亮的 toastr 通知,但是设置变量没有任何效果,直到我请求停止,或者它达到 999。

当我按下停止时,vm.status 会写出最后的序列号,或者当整个事情停止时,它会写出 999。

所以在 vm 上设置属性的频率似乎存在一些问题?我需要 $scope.$watch 之类的东西来完成这项工作吗?

最佳答案

嗯,我还不清楚你到底想达到什么目的,但看起来你正在更新你的模型,不受 Angular 控制。所以,你需要通知 angular 你在做什么。

最有可能的是,像这样的事情应该可以解决问题:

hub.client.sent = function (counter) {
   $scope.apply(function(){
      log(' singal_R ## event: sent ' + counter);
      vm.status = counter;
   });
};

关于javascript - Angular Controller 的频繁更新未反射(reflect)在 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516168/

相关文章:

javascript - 比较 HTML5 Canvas 中的两种字体

javascript - 具有整数比较的 AngularJS 过滤器

Node.js/SignalR 通信

javascript - 本地存储集项目替换而不是更新

javascript - 如果单击复选框,防止 TD onclick 触发?

javascript - 当容器上有 ng-show 时,为什么图表更新会失败?

http-headers - 检查 SignalR 集线器中的可选 header

SignalR "Error during negotiation request"

javascript - 属性索引对象的简短 JavaScript 代码

javascript - 如何使用 Angular js 执行日常 Javascript 操作?