Angularjs:动态编译ng repeat
我在Angularjs身上发现了一些奇怪的行为。我的指令只是将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
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中抛出,这就是我感到困惑的原因。非常感谢。