Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angularjs编译和链接dom递归操作_Angularjs_Angularjs Directive_Angularjs Ng Repeat - Fatal编程技术网

angularjs编译和链接dom递归操作

angularjs编译和链接dom递归操作,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我和angular一起工作了一个月左右。我在处理dom操作时遇到问题。作为练习,我想创建一个将嵌套对象重复到树视图的指令。请不要给我发送联机示例的链接。我发现了很多,但大多数都没有解释他们在做什么,更重要的是,为什么代码是这样写的 我已经创建了一个plnkr作为示例代码进行测试,位于此处: 我在网上找到的每个示例都解释了所有编译函数都在pre或post链接之前运行,post链接是事件应该注册和绑定的地方。我也可以在指令中使用链接或编译函数,编译函数返回post链接。您可以在plnkr中看到,一切

我和angular一起工作了一个月左右。我在处理dom操作时遇到问题。作为练习,我想创建一个将嵌套对象重复到树视图的指令。请不要给我发送联机示例的链接。我发现了很多,但大多数都没有解释他们在做什么,更重要的是,为什么代码是这样写的

我已经创建了一个plnkr作为示例代码进行测试,位于此处:

我在网上找到的每个示例都解释了所有编译函数都在pre或post链接之前运行,post链接是事件应该注册和绑定的地方。我也可以在指令中使用链接或编译函数,编译函数返回post链接。您可以在plnkr中看到,一切都是这样设置的

我知道link函数可以使用transclude函数来创建元素的克隆。这就是我被困的地方。我试图将克隆附加到元素中,但我总是让浏览器冻结并且没有响应

在角度文档中,它说:

注意:compile函数不能处理在自己的模板或编译函数中递归使用自己的指令。编译这些指令会导致无限循环和堆栈溢出错误。通过在postLink函数中手动使用$compile强制编译指令的模板,而不是依赖于通过模板或templateUrl声明进行的自动模板编译或编译函数内部的手动编译,可以避免这种情况

但是没有关于操作dom的过程的例子。我们如何使用compile处理link函数中的递归?在某些示例中,它们清除html元素,然后附加克隆。为什么?如何递归地构建和附加模板?是将元素转换到模板中更好,还是将我的模板放在指令中然后克隆它更好

我希望您能帮助我,因为我找不到任何关于编译函数的详细信息以及递归dom操作所需的步骤。如果您想提供帮助,请提供每行代码的解释

谢谢你的帮助,

嗨,我修好了弹片:

我看到的最大问题是递归从未结束,这就是为什么会出现堆栈溢出

如果你有任何问题,请告诉我


希望这能有所帮助。

谢谢你的帮助。您添加的解决方案是我在某个地方的另一篇plnkr文章中在线找到的实际代码之一。我真正想要的是:是什么阻止了递归?是对tElem.contents().remove()的调用吗?这行的另一个功能是:compiledContents=$compile(contents,transclude)?$compile服务的文档在哪里,它需要什么参数,返回什么?最后,在上次克隆元素的调用中,返回值是如何使用的?为什么link func没有transclude参数?您是如何得到的?当模板中的代码:ng repeat=“node in nodes.children”完成时,递归停止。在你的plunkr中,你一次又一次地添加你的模板,而且没有结束——至少给这个人一个积极有用的分数,让他努力回答你的问题。