所以由于客户端限制,我无法真正摆脱这个问题,但一般来说我有一个双向数据绑定字符串,在html端不会更新,直到某些任意事件被触发(一旦任何按钮)点击它然后它会更新,即使只是切换可见性的琐碎按钮将更新它)。因此,如果我最初将$ scope.verifiedAddressed1设置为等于“验证...”它将数据绑定,但是一旦我将其更改为“1234 Cherry Lane”,它将不会更新,直到我点击我的网页上的某个按钮。事情的html方面看起来像这样
<p>{{verifiedAddressed1}}</p> // "verifying..."
虽然角度代码如下所示:
$scope.verifiedAddressed1 = "verifying...";
$scope.verifyAddress = function(isValid){
if(isValid){
$.get( "validURL.com", function( data ) {
$scope.verifiedAddressed1 = data[0].validData;
console.log($scope.verifiedAddressed1); //"1234 Cherry Lane"
});
}, 400);
setTimeout(function() {
console.log($scope.verifiedAddressed1); //"1234 Cherry Lane"
}, 700);
}
}
有没有人见过这样的奇怪错误?我已经和AngularJS合作了一段时间了,我知道这里和那里仍然存在很多小错误,特别是按钮点击和什么不是,但我相当确定这与按钮事件无关,因为任何页面上的按钮将激活VerifiedAddressed1
上的双向绑定更新答案 0 :(得分:3)
您应该使用Angular的服务来保持范围的更新。使用$.get
代替$http.get
而不是setTimeout
,而不是使用$timeout
(但仅适用于您真正需要在更新循环之外工作的情况)。从来没有真正有理由自己调用$scope.$apply
- 如果你正确使用角度,范围将保持更新。
myApp.controller('MyController', ['$scope', '$http',
function ($scope, $http) {
$scope.verifyAddress = function (isValid) {
if (isValid) {
$http.get('validURL.com')
.success(function (data) {
//...
})
.error(function (data, status) {
//...
});
}
};
}]);