我正在尝试将我的角度应用程序的控制器刷新为从socket.io接收对象。一切正常,但是当我使用push函数向变量添加新对象时,视图不会显示。这是我的代码。
Controller.js
app.controller('controller', function(){
var vm = this;
var socket = io.connect('http://localhost:3000');
//The variable that bends
vm.messages = [];
socket.on("addMsg", function(obj){
vm.messages.push({user: obj.user, content: obj.content, color:obj.col});
});
});
view.jade
...
body(ng-controller = "controller as con")
.messages
p Messages:
p(ng-repeat="array in con.messages") content: {{array.content}} , color: {{array.color}}
我的代码有什么问题?目的是使用ng-repeat显示p标签中的所有内容。
答案 0 :(得分:2)
来自html5rocks article angular-websocket的这个微小的角度工厂套接字服务在角度范围内包装了socket.io。它执行auto $ rootScope。$ apply()
app.factory('socket', function ($rootScope) {
var socket = io.connect();
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});
答案 1 :(得分:0)
当我尝试更新socket.on
回调中的角度范围变量时,我遇到了完全相同的问题。正如@ aw04在评论中提到的那样,修复是对$scope.$apply()