スコープの値を直接更新すると、表示が更新されますが、この値がAJAXコールバックから更新されても更新されません。ここに簡略化した例があります - http://jsfiddle.net/hS8Bs/1/AJAXコールバックからのAngularJS更新値
どうすれば回避できますか?
更新:リンクの2回目のクリックで値が更新されることに気がつきましたが、私が探しているものではありません。
スコープの値を直接更新すると、表示が更新されますが、この値がAJAXコールバックから更新されても更新されません。ここに簡略化した例があります - http://jsfiddle.net/hS8Bs/1/AJAXコールバックからのAngularJS更新値
どうすれば回避できますか?
更新:リンクの2回目のクリックで値が更新されることに気がつきましたが、私が探しているものではありません。
実際の問題は$scope.$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/
これは選択された回答のアドオンです。Angular JSは、$ apply()関数を実装した時点で、まだ「エラー:$ digest already in progress」と呼ばれていました。
だから私はこの記事にWill Vincent'sコードが見つかりました:それはようなものになるだろう
$scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
if(fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
:ときに安全に、それは)$がすでに進行中のダイジェストをチェックし、のみ$(適用呼び出して、 AngularJS : What's the Angular way to interact with a form? を:
$scope.safeApply(function() { ...code here... });
http://jsfiddle.net/hS8Bs/3/また、これは可能な解決策です。しかし、$ httpを使用する以下に述べる他の解決策は、それを行う正しい方法です。 – ganaraj