MEAN 堆栈和 socket.io,表达式计算速度太快

MEAN stack and socket.io, expressions evaluate too fast

我很难使用 angular 和 socket.io。 访问页面时,我使用 socket.io 连接到服务器 (Node.js)。服务器从 mongoDB 中提取数据,然后将数据发送回 angular 中写入的客户端,而客户端又应使用 ng-repeat.

显示数据

admin.hjs:

<body ng-controller="MainCtrl as mc">
   <H1>Admin</H1>
   {{mc.msgs.length}}
   {{mc.msgs}}
   <div ng-repeat="msg in mc.msgs">
       {{msg.name}}
   </div>
</body>

app.js:

(function() {
var app = angular.module('msgsSystem', []);

app.controller('MainCtrl', function(){
    var ctr = this;
    ctr.msgs = [];
    var socket = io.connect();
    //when receiving the msgs from the server
    socket.on('getMsgs', function(data){
        ctr.msgs = data;
        console.log('gotMsgs');
        console.log(ctr.msgs.length);
    });
  });
})();

访问页面时,我看到 {{mc.msgs.length}} {{mc.msgs}} 被评估为 0 [],但在控制台中 gotMsgs 6。我的猜测是页面在响应从服务器返回之前呈现。

如有任何帮助,我将不胜感激。

如果您在异步方法(套接字,ajax)中更新作用域变量,

AngularJs 将无法正常工作。 $scope.$apply() 解决了这个问题。

app.controller('MainCtrl', function($scope){
    $scope.msgs = [];
    var socket = io.connect();
    //when receiving the msgs from the server
    socket.on('getMsgs', function(data){
        $scope.msgs = data;
        $scope.$apply();
    });
  });
})();