あなたは私と同じ船に乗っていると思っていましたが、そうではないかもしれません。いずれにせよ、ここに2つの解決策があります。私は2番目に立ち往生しました。
1) 特定の要素に対する指令
扱っている要素がdiv、span、h1などになることがわかっている場合、またはそれは問題ではありません(1つの要素を取り、それを必要なものに置き換えます)。
HTML
<div data-mydirective>
<span>some other stuff</span>
<div>more stuff</div>
</div>
指令
module.directive( 'mydirective', [ function() {
return {
restrict: "A",
controller: function( $scope ) {
$scope.test = function() {
console.log('howdy');
}
},
template: "<div data-ng-transclude data-ng-mouseover='test()'></div>",
transclude: true,
replace: true,
link: function ( scope, element, attrs ) {
}
};
}]);
出力
<div ng-mouseover="test()" data-ng-transclude="" data-mydirective="">
<span class="ng-scope">some other stuff</span>
<div class="ng-scope">more stuff</div>
</div>
2) 不特定要素のディレクティブ
これが私が直面していた問題です。ng-*
基本的に、h1、h2、span、div、nav などにあるディレクティブがあり、ディレクティブ内から属性を追加したい場合。
template
要素が何であるかがわからないため、 a を使用できません。を取り、それを右h1
に置き換えたくないですか?div
これが、私がコンパイルルートを下っていた理由です。は、template
実際にアクセスできる関数にすることができelement
ますattrs
。
指令
module.directive( 'mydirective', [ function() {
return {
restrict: "A",
controller: function( $scope ) {
$scope.test = function() {
console.log('howdy');
}
},
template: function( element, attrs ) {
var tag = element[0].nodeName;
return "<"+tag+" data-ng-transclude data-ng-mouseover='test()></"+tag+">";
},
transclude: true,
replace: true,
link: function ( scope, element, attrs ) {
}
}
}]);
HTML/出力
同上。div
HTMLの要素を に変更するnav
と、出力に変更が反映されます。