我创建了这个transclude:'element'Atribute指令:
<div repeat="5" ng-click="sayNumber(number)">
This is number {{number}}
</div>
app.directive('repeat', function () {
return {
restrict: 'A',
transclude: 'element',
link: function (scope,element,attrs,ctrl,transclude) {
var repeatNum=parseInt(attrs.repeat);
for(var i=0;i<repeatNum;i++){
var childScope = scope.$new();
childScope.number = i;
transclude(childScope, function(clone,cloneScope) {
element.parent().append(clone);
});
}
}
}
});
Transclude元素按预期呈现,但在 - 之后没有看到父作用域,并且不能调用它的任何函数。
这是jsfiddle:http://jsfiddle.net/3anj78sz/10/
它还包含transclude:true Element指令,它按预期工作,以及标准ng-repeat,我试图用transclude:element指令实现这些功能。
我做错了什么?
答案 0 :(得分:0)
好的,经过一段时间的挖掘后我发现,由于在同一个元素上使用了多个角度指令,这个问题已经发生了 - 在这种情况下 - 都是“重复”ang“ng-click”。
在一个指令不依赖于另一个指令的情况下,这不会导致任何麻烦,但如果是这样,它可能(或可能不会)导致情况,当angular将依赖于指令之前处理依赖指令。 当指令具有相同的优先级时会发生这种情况,并按字母顺序对它们进行角度处理。
因此,要在问题工作中做出示例,我所要做的就是将“重复”指令设置为比“ng-click”更高的优先级。 这是正确指令的定义对象:
{
restrict: 'A',
transclude: 'element',
priority: 1000,
link: ...
}