Angularjs:动态编译ng repeat

Angularjs:动态编译ng repeat,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我在Angularjs身上发现了一些奇怪的行为。我的指令只是将ng repeat添加并编译到我的dom元素中。但是,范围变量项不可访问。请查看下面的代码以获取解释 var demo=angular.module('demo',[]); 指令('customRepeat',函数($compile){ 返回{ 优先事项:2000年, 限制:“A”, 编译:函数(元素){ element.attr('ng-repeat','itein[1,2,3,4,5,6]') 返回函数(范围、元素){ $com

我在Angularjs身上发现了一些奇怪的行为。我的指令只是将
ng repeat
添加并编译到我的dom元素中。但是,范围变量
不可访问。请查看下面的代码以获取解释

var demo=angular.module('demo',[]);
指令('customRepeat',函数($compile){
返回{
优先事项:2000年,
限制:“A”,
编译:函数(元素){
element.attr('ng-repeat','itein[1,2,3,4,5,6]')
返回函数(范围、元素){
$compile(元素)(范围)
}
}
}
});

我的物品
项目:{{Item}

修改原始DOM时编译指令的正确方法是,从指令编译函数(如
var compileFn=$compile(element)
)中创建
compileFn
,然后在函数内部使用类似的
范围重新编译元素。这样,您还可以在Angular 1.2.X和1.6.X版本中看到
最大调用堆栈超出错误
。通过打开控制台进行检查

基本上,您在directive元素上添加了一个
ng repeat
,并再次重新编译该元素,这将导致再次编译
customDirective
,并且这个过程将无限继续进行。所以,在再次编译元素之前,您应该确保已经删除了
自定义报表
指令属性。这将不允许
自定义报告
无限执行

var demo = angular.module('demo', []);
demo.directive('customRepeat', function($compile) {
    return {
      priority: 2000,
      restrict: 'A',
      compile: function(element){
        element.attr('ng-repeat', 'item in [1,2,3,4,5,6]')
        element.removeAttr('custom-repeat');
        //this line is need for compilation of element
        var compile = $compile(element);
        return function(scope, element) {
          compile(scope); //linking scope
        }
      }
    }
});

也许我不清楚。如果运行代码,您将看到
{{item}}
没有绑定。它应该是
项目1
项目2
。。。等等最奇怪的是,正如我刚才注意到的,通过在
{{{}}
之后添加一个空表达式
{{{}}
,实际上可以暂时解决这个问题。“这看起来确实像一个bug。”Tympanix用plunker演示来检查我的更新答案。。希望现在天气晴朗1.我现在明白了。非常聪明的解决方案。
最大调用堆栈超出错误
没有在JSFIDLE中抛出,这就是我感到困惑的原因。非常感谢。