1. ホーム
  2. angularjs

[解決済み] ディレクティブテストにおける$applyと$digestの比較

2023-01-09 19:03:07

質問

スコープ上の特定の属性の状態に反応するディレクティブがあり、 テストでその属性を変更し、正しく反応することを確認したい場合、 その変更を行う最良の方法はどれでしょうか?

この両方のパターンを見たことがあります。

scope.$apply(function() {
    scope.myAttribute = true;
});

scope.myAttribute = true;
scope.$digest();

両者の違いと、どちらが良いのか、その理由は?

どのように解決するのですか?

scope.$digest() は現在のスコープと、その子スコープすべてでウォッチャーを起動します。 scope.$apply は渡された関数を評価し $rootScope.$digest() .

最初のものは、現在のスコープとその子スコープのウォッチャーを評価する必要があるため、より高速です。2番目のものは、現在のスコープと子スコープのウォッチャーを評価する必要があるため、より遅いです。 $rootScope とその子スコープ全てのウォッチャーを評価する必要があるためです。

ウォッチャーの一つでエラーが発生したときに scope.$digest を使っている場合、そのエラーは $exceptionHandler サービスでは処理されませんので、自分で例外を処理する必要があります。 scope.$applytry-catch ブロックを使い、すべての例外を $exceptionHandler .