Transcluded元素克隆无法达到范围

时间:2015-07-02 15:40:10

标签: javascript angularjs

我创建了这个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指令实现这些功能。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

好的,经过一段时间的挖掘后我发现,由于在同一个元素上使用了多个角度指令,这个问题已经发生了 - 在这种情况下 - 都是“重复”ang“ng-click”。

在一个指令不依赖于另一个指令的情况下,这不会导致任何麻烦,但如果是这样,它可能(或可能不会)导致情况,当angular将依赖于指令之前处理依赖指令。 当指令具有相同的优先级时会发生这种情况,并按字母顺序对它们进行角度处理。

因此,要在问题工作中做出示例,我所要做的就是将“重复”指令设置为比“ng-click”更高的优先级。 这是正确指令的定义对象:

        {
           restrict: 'A',            
           transclude: 'element',
           priority: 1000,
           link: ...
        }