被屏蔽的元素克隆可以'达不到范围

Transcluded element clone can't reach scope

本文关键字:达不到 范围 屏蔽 元素      更新时间:2023-09-26

我创建了这个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元素按预期呈现,但after-看不到父作用域,并且不能调用其任何函数。

这是jsfiddle:http://jsfiddle.net/3anj78sz/10/

它还包含transclude:true Element指令,它按预期工作,以及标准ng重复,我试图用transclude:Element指令实现这一功能。

我做错了什么?

好的,经过一段时间的挖掘,我发现这个问题是因为在同一个元素上使用了多个角度指令,在这种情况下,都是"repeat"ang"ng-click"。

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

因此,为了让问题中的例子发挥作用,我所要做的就是将"repeat"指令的优先级设置为高于"ng-click"指令。这是正确指令的定义对象:

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