我以为你和我在同一条船上,但也许你不是。无论哪种方式,这里有两个解决方案。我被困在第二个。
1) 特定元素指令
如果您知道您正在处理的元素将是 div、span、h1 等等 - 或者没关系(取一个元素并将其替换为您需要的元素)。
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) 针对非特定元素的指令
这是我面临的问题。基本上,如果您有一个可能位于 h1、h2、span、div、nav 等的指令,并且您想ng-*
从指令中添加您的和属性。
你不能使用 atemplate
因为你不知道元素是什么。不想取 ah1
并用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 中的元素更改为 a nav
,输出将反映更改。