同じコントローラーを使用する 2 つの別々のページがあります。
ページ間で変更するためにUIルーターの状態を使用しています。
これらには、テンプレートに templateUrl を順番に使用する次のディレクティブが含まれて
い
ます
。
ページ B
指令
_1 指令_3 指令_4
指令
_2
各ディレクティブには、その親スコープ $scope.array に双方向でバインドされた配列 $scope.array があり、それぞれがそのディレクティブ番号をその配列に追加します。
各ディレクティブもコンソール ログに「Here:」 + ディレクティブ番号を記録します。
共通コントローラーで $scope.array を監視し、内部の何かが変更されたときに $scope.array を出力する監視関数を設定しました。
ページ A に移動すると、コンソールに次のように表示されます
: 1
[1]
ここ: 2
[1,2]
移動してからページ A に移動すると、コンソールに表示されます
ここ: 1
ここ: 2
[1,2]
したがって、watch 関数は 1 回だけ起動します。
次に、奇妙なことが起こります。ページ B に到達すると、コンソールに表示されます
ここ: 1
ここ: 2
[1,2]
ここ: 3
[1,2,3]
ここ: 4
[1,2,3,4 ]
したがって、ディレクティブは順番にロードされていないようです! 直観的に、最終的な順序は、ディレクティブがページにどのように配置されているかのように、1、3、4、2 になります。
Angular はテンプレート間でスマートな比較を行い、いくつかのディレクティブが既に読み込まれていると判断し、新しいディレクティブを試す前にそれらを即座に実行していますか?
2 回目にページ B に戻ると、通常どおり読み込まれます。何が起こっている?