スコープ値を直接更新すると、ビューで問題なく更新されますが、この値が AJAX コールバックから更新されると更新されません。ここに簡単な例があります - http://jsfiddle.net/hS8Bs/1/
どうすれば回避できますか?
更新:リンクを 2 回クリックすると値が更新されることに気付きましたが、探しているものではありません。
スコープ値を直接更新すると、ビューで問題なく更新されますが、この値が AJAX コールバックから更新されると更新されません。ここに簡単な例があります - http://jsfiddle.net/hS8Bs/1/
どうすれば回避できますか?
更新:リンクを 2 回クリックすると値が更新されることに気付きましたが、探しているものではありません。
本当の問題は、の欠如です$scope.$apply
。角度ダイジェストの外部で角度モデルを更新する場合は、apply を使用する必要があります。
$.getJSON('/echo/json/', {}, function(data){
$scope.$apply(function(){
$scope.period = '2010 - 2011';
});
});
これにより、ダイジェストがトリガーされて更新が表示され、適用内のコードが例外をスローすると、$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/