当我直接更新范围值时,它在视图中更新得很好,但是当这个值从 AJAX 回调更新时它不会更新。这是简化的示例 - http://jsfiddle.net/hS8Bs/1/
我怎样才能绕过它?
更新:我注意到第二次点击链接确实会更新值,但这不是我想要的。
当我直接更新范围值时,它在视图中更新得很好,但是当这个值从 AJAX 回调更新时它不会更新。这是简化的示例 - http://jsfiddle.net/hS8Bs/1/
我怎样才能绕过它?
更新:我注意到第二次点击链接确实会更新值,但这不是我想要的。
真正的问题是缺乏$scope.$apply
. 当您在角度摘要之外更新角度模型时,您应该使用 apply。
$.getJSON('/echo/json/', {}, function(data){
$scope.$apply(function(){
$scope.period = '2010 - 2011';
});
});
这将触发 diggest 以查看更新,如果您在 apply 中的代码抛出异常,它将被重定向到$exceptionHandler
服务。
这是所选答案的插件,当我实现 $apply() 函数时,我发现 Angular JS 仍然调用“错误:$digest 已经在进行中”。
所以我在这篇文章中找到了Will Vincent 的代码: AngularJS : What's the Angular way to interact with a form? ,它检查 $digest 是否已经在进行中,并且仅在安全时调用 $apply() 以:
$scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
if(fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
所以它会是这样的:
$scope.safeApply(function() { ...code here... });
这是您缺少的教程,您需要使用控制器的 $http 参数来更新字段。检查您更新的示例http://jsfiddle.net/hS8Bs/2/