何かを返す前にディレクティブで JavaScript を実行することも、何かを返す前にディレクティブのコンパイル ステップで実行することもできます。
angular.module('foo').directive('fooDirective', [function(){
console.debug('before return');
return {
restrict: 'E',
controller: function($scope){
console.debug('controller');
},
compile: function(scope, elem){
console.debug('compile');
return {
pre: function(scope,elem, attr){
console.debug('pre');
},
post: function(scope,elem,attr){
console.debug('post');
}
}
}
}
}]);
<body ng-app="foo">
<foo-directive></foo-directive>
<foo-directive></foo-directive>
</body>
これにより、次のコンソール ログの順序が生成されます。
before return
compile
compile
controller
pre
post
controller
pre
post
これについていくつか質問があります。
1) 実際のディレクティブ オブジェクトを返す前にコードを実行したいのはなぜですか? ユースケースは何ですか?
2) プリ/ポスト リンク関数を返す前にコードを実行したいのはなぜですか? プリリンク手順はコンパイル手順とどう違うのですか? ユースケースとは?
3) 要素の数に関係なく、他のすべてが同じ順序で繰り返し実行されるのに、2 つの項目がある場合にコンパイルが 2 回続けて実行されるのはなぜですか?