當我直接更新範圍值時,它在視圖中更新得很好,但是當這個值從AJAX回調更新時它不會更新。這裏是簡化的例子 - http://jsfiddle.net/hS8Bs/1/AngularJS從AJAX回調更新值
我該如何解決它?
更新:我注意到,單擊鏈接上的第二次更新值,但它不是我正在尋找的。
當我直接更新範圍值時,它在視圖中更新得很好,但是當這個值從AJAX回調更新時它不會更新。這裏是簡化的例子 - http://jsfiddle.net/hS8Bs/1/AngularJS從AJAX回調更新值
我該如何解決它?
更新:我注意到,單擊鏈接上的第二次更新值,但它不是我正在尋找的。
真正的問題是缺少$scope.$apply
。當您更新角度摘要以外的角度模型時,應使用apply。
$.getJSON('/echo/json/', {}, function(data){
$scope.$apply(function(){
$scope.period = '2010 - 2011';
});
});
這將觸發diggest看到更新,如果你的代碼中的應用拋出一個異常,它會被重定向到$exceptionHandler
服務。
謝謝,它爲我修好了! – arnaslu
'$ scope。$ apply'正是我一直在尋找的,謝謝! – GameScripting
謝謝,它真的很神奇!你拯救我的一天! – wagyaoo
這裏是你的missing tutorial你需要使用控制器的$ http參數來獲取字段更新。 檢查更新的示例http://jsfiddle.net/hS8Bs/2/
這是所選答案的插件,當我實現$ apply()函數時,我發現Angular JS仍然稱爲「Error:$ digest already in progress」。
所以我發現這個職位Will Vincent's代碼: AngularJS : What's the Angular way to interact with a form? ,它會檢查$消化已在進行中,只調用$適用()時,安全:
$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://jsfiddle.net/hS8Bs/3/這也是一種可能的解決方案。但是下面提到的使用$ http的其他解決方案是正確的。 – ganaraj