angular.js モジュールで定義された 2 つのディレクティブがあります。最初に宣言された HTML 要素はそのディレクティブを実行しますが、他のディレクティブを使用する 2 番目の HTML 要素はそれを実行しません。
この HTML を考えると:
<div ng-app="myApp">
<div ng-controller="PlayersCtrl">
<div primary text="{{primaryText}}"/>
<div secondary text="{{secondaryText}}"/>
</div>
</div>
およびこの angular.js コード:
var myApp = angular.module('myApp', []);
function PlayersCtrl($scope) {
$scope.primaryText = "Players";
$scope.secondaryText = "the best player list";
}
myApp.directive('primary', function(){
return {
scope: {
text: '@'
},
template: '<h1>{{text}}</h1>',
link: function(scope, element, attrs){
console.log('primary directive');
}
};
});
myApp.directive('secondary', function(){
return {
scope: {
text: '@'
},
template: '<h3>{{text}}</h3>',
link: function(scope, element, attrs){
console.log('secondary directive');
}
};
});
結果の HTML は「プライマリ」ディレクティブのみであり、「セカンダリ」ディレクティブはレンダリングされません。
<div ng-app="myApp" class="ng-scope">
<div ng-controller="PlayersCtrl" class="ng-scope">
<div primary="" text="Players" class="ng-isolate-scope ng-scope">
<h1 class="ng-binding">Players</h1>
</div>
</div>
</div>
「プライマリ ディレクティブ」テキストのみが出力されるため、コンソール出力でもこれが検証されます。
次に、プライマリ要素とセカンダリ要素の順序を入れ替えると、セカンダリディレクティブが実行され、プライマリディレクティブは実行されません。
<!-- reversed elements -->
<div secondary text="{{secondaryText}}"/>
<div primary text="{{primaryText}}"/>
<!-- renders this HTML (secondary, no primary) -->
<div ng-app="myApp" class="ng-scope">
<div ng-controller="PlayersCtrl" class="ng-scope">
<div secondary="" text="the best player list" class="ng-isolate-scope ng-scope">
<h3 class="ng-binding">the best player list</h3>
</div>
</div>
</div>
どうしてこれなの?私は何を間違っていますか?