コントローラーの $scope から取得したデータを使用して HTML 要素を構築する AngularJS のディレクティブを使用しています。サーバーからJSONデータを取得したときに、コントローラーに $scope.ready=true 変数を設定させました。この方法では、ディレクティブは、データがフェッチされるたびにページを何度も構築する必要がありません。
発生するイベントの順序は次のとおりです。
コントローラー ページはルートを読み込み、コントローラー関数を起動します。
ページはディレクティブをスキャンし、この特定のディレクティブが起動されます。
ディレクティブは要素を構築し、その式を評価して先に進みますが、ディレクティブ リンク関数が起動されると、コントローラーが「準備完了」になるまで待機します。
準備ができたら、内部関数が起動され、パーシャルの構築が続行されます。
これは機能しますが、コードは面倒です。私の質問は、これを行う簡単な方法はありますか? コントローラーがイベントを発生させた後にコードが発生するように、コードを抽象化できますか? この onReady 内部メソッドを作成する代わりに。
これがどのように見えるかです(動作しますが、テストするのは面倒です):
angular.module('App', []).directive('someDirective',function() {
return {
link : function($scope, element, attrs) {
var onReady = function() {
//now lets do the normal stuff
};
var readyKey = 'ready';
if($scope[readyKey] != true) {
$scope.$watch(readyKey, function() {
if($scope[readyKey] == true) {
onReady();
}
});
}
else {
onReady();
}
}
};
});