我使用angularJS跟踪地图坐标以更新数据,但是我遇到了一个奇怪的问题,即您在屏幕上看到的数据与console
语句不匹配。
zombie.controller("move", function($scope) {
io.on("location", function(data) {
console.log(data);
$scope.location = data.loc;
})
$scope.move = function(direction) {
$scope.title = ": Traveling";
io.emit("move", {direction:direction});
}
});
控制台将记录类似:Object {loc: "(59,30)"}
我们假设之前的数据为Object {loc: "(60,31)"}
。当控制台记录(60,31)
时,我的页面将打印(59,30)
。
此外,当页面加载时,初始单击不会显示任何内容,但控制台将记录正确的数据。
我已经尝试在角度函数内部移动io.on('location')
,但是如果它在move()
内部,它会连续15次变为疯狂并记录下来并且滞后。除了这个问题外,函数外面没问题。有什么想法吗?
答案 0 :(得分:7)
io.on("location")
中的代码由socket.io启动,Angular不知道它,所以它的范围更改直到下一个摘要周期才会反映出来。这可能就是屏幕更新总是落后一步的原因。使用$scope.$apply()
强制摘要...
io.on("location", function(data) {
console.log(data);
$scope.location = data.loc;
$scope.$apply();
})
答案 1 :(得分:0)
我同意上述答案,但在某些情况下仍然喜欢输入文字框,
你需要给定时器来正确消化它。
setTimeout(function(){
$scope.apply();
}, 50);
这解决了我的问题。