【发布时间】:2014-07-01 03:13:11
【问题描述】:
我已经使用 Angular 一个月左右了。我在处理 dom 操作时遇到问题。作为练习,我想创建一个将嵌套对象重复到树视图的指令。请不要向我发送在线示例的链接。我发现了很多,但大多数都没有解释他们在做什么,或者更重要的是为什么代码是这样编写的。
我创建了一个 plnkr 作为示例代码进行测试,位于此处:http://plnkr.co/edit/Zcx63dJZxQyDsjAHIALh?p=preview
我在网上找到的每个示例都说明所有编译函数都在 pre 或 post 链接之前运行,而 post 链接是应该注册和绑定事件的地方。我也可以在我的指令中使用链接或编译函数,编译函数返回一个发布链接。您可以在 plnkr 中看到一切都是这样设置的。
我了解链接函数可以采用创建元素克隆的 transclude 函数。这就是我卡住的地方。我试图将克隆附加到元素,但我总是让我的浏览器冻结并且没有响应。
在角度文档中它说:
注意:编译函数不能处理在自己的模板或编译函数中递归使用自身的指令。编译这些指令会导致无限循环和堆栈溢出错误。这可以通过在 postLink 函数中手动使用 $compile 来强制编译指令的模板来避免这种情况,而不是依赖于通过 template 或 templateUrl 声明的自动模板编译或在 compile 函数中手动编译
但是没有关于操作 dom 的过程的示例。我们如何使用编译处理链接函数中的递归?在某些示例中,他们清除元素 html 然后附加克隆。为什么?如何递归地构建和附加模板?将元素嵌入到模板中更好,还是将我的模板放在指令中然后克隆它更好?
我希望你能帮助我,因为我找不到任何关于 compile 函数的详细信息以及递归 dom 操作所需的步骤。如果您想提供帮助,请提供每行代码的说明。
感谢您的帮助,
【问题讨论】:
标签: angularjs angularjs-directive angularjs-ng-repeat