Angularjs $compile指令不断重复

Angularjs $compile指令不断重复,angularjs,angularjs-directive,Angularjs,Angularjs Directive,为什么这种情况不断重复?我在chrome中得到一个“RangeError:超过最大调用堆栈大小”错误 app.controller('my_cont',function($scope,$compile){ container.html('<todo></todo>') $compile(container)($scope); }) app.directive('todo',function($compile){ return{

为什么这种情况不断重复?我在chrome中得到一个“RangeError:超过最大调用堆栈大小”错误

app.controller('my_cont',function($scope,$compile){
     container.html('<todo></todo>')
     $compile(container)($scope);
})
app.directive('todo',function($compile){
     return{
          template:'<ul><li>Blah</li><li>Blah</li></ul>',
     }
})
app.controller('my_cont',函数($scope,$compile){
container.html(“”)
$compile(container)($scope);
})
app.directive('todo',function($compile){
返回{
模板:“
  • 诸如此类”, } })
我以前也遇到过这个问题,尽管与这里的情况不同。像这里一样在控制器初始化时调用$compile将编译该指令,并且由于该指令初始化控制器并再次编译,因此基本上会有无限嵌套的控制器。只需将您的element指令放入HTML中,让Angular为您编译即可。

什么是
容器
?为什么要在控制器中进行DOM操作?你能用实际显示错误的代码更新你的问题吗?如果容器是包含my_cont控制器的元素,你将重新编译该元素并重新启动该控制器(并再次将html重置为todo并重新编译整个过程…)我怀疑这是溢出的原因。如果需要这样做,可以创建一个todo元素,自己编译,然后将其添加到HTML中。不要先添加到HTML。我在这里假设todo指令的控制器是my_cont控制器。这是不可能的。我需要动态插入内容并呈现它。这就是compile的正确含义?是的,compile步骤编译指令并将它们转换为您指定的HTML。很少需要直接调用compile,我只需要对递归HTML进行编译,比如列表中的列表。我建议您只将要编译的指令放在HTML中,并使用ng show/hide或ng(如果允许您编译的话)来显示它。