0

angular ベースの Web サイトで jasper レポートを使用しています。Jasper レポートの visual.js には jQuery が含まれています。レポートをロードすると、スコープ内の値が更新されます

$scope.reportLoaded = true

しかし、ページで更新されていません

{{reportLoaded}} //false

おそらく、これは angular と jQuery の間の競合であると思います。これを解決する唯一の方法は、私が読んだ $scope.$$apply() を使用することです。適用を使用せずにこの問題を解決するにはどうすればよいですか? 問題を解決する他の方法がない場合、それを使用しても安全ですか?

4

2 に答える 2

0

angular によって行われないスコープ内の更新は、angular には認識されません。$scope.$apply();したがって、 current の値を更新するときに使用する必要があります$scope

Angular は双方向のデータ バインディング メカニズムであるため、モデルを変更するとビューが更新され、その逆も同様です。内部で angular は$digest、現在のすべてのチェックを行うサイクルを実行します$scope。Angular 内の変数で更新を行っている限り、$scope正常に動作しますが、それ以外では、ネイティブ javascript や jQuery などの他のライブラリで値を変更する場合は、$digestサイクルを実行する必要があります。ここ$scope.$apply()が便利です。


$scope.$digest()も非常に便利で、現在のスコープで実行されますが、内部で実行され、内部$scope.$apply()で実行されるため、よりもかなり高速です。 $scope.$digest()$scope.$apply()$rootscope$rootscope.$digest()

$scope.$digest()これを最初に使用するには、スコープウォッチャーをセットアップする必要があり、実際に行うことは、スコープの変更を常に監視し、この場合、角度または他のソースからのものであるかどうかは、スコープウォッチャーをセットアップするための完璧な例ですで使用したい場合$scope.$digest()

$scope.$watch('reportLoaded', function(newValue, oldValue, scope) {
   scope.reportLoaded = newValue !== oldValue ? newValue : oldValue;
});
于 2015-09-17T13:52:56.553 に答える
0

これらの状況では $apply を使用する必要があります。これが $apply の目的です。と言う為です

「ねえ角度、私はあなたの知らないうちにいくつかの変更を加えました。何が変更されたかを確認するには、ダーティチェックメカニズムを実行する必要があります」

したがって、$apply を使用します

于 2015-09-17T13:51:57.560 に答える