angularjs - 插入$ compile-d html

时间:2013-02-06 20:07:11

标签: angularjs datatables

(请注意,您不需要了解此项的数据表..)

我正在创建一个处理DataTables的指令。我想做的是有一个带有两个图标的动作栏 - 编辑和删除。这些图标应响应ng-click。

数据表允许您通过为给定的列定义(mRender)提供回调来实现此目的。此回调为该单元格值返回 html字符串,该值将插入DOM而不是实际单元格值。

结帐plunker。强调了两个重要功能:

  • renderActionIcon - 我上面提到的回调的实现。它会在单元格中生成我想要的HTML字符串。
  • registerNewHtmlWithAngular - 表面上让角度知道我需要为该列注册的ng-clicks的函数。

registerNewHtmlWithAngular应该怎么做?

如果$编译html,angular会添加相应的click事件侦听器并返回一个元素,但由于Datatables函数需要HTML,因此这些已注册的元素不会添加到DOM中。

有什么想法吗?谢谢大家!

2 个答案:

答案 0 :(得分:10)

键盘敲击一天后:

似乎没有办法将$编译成 html 并让它在DOM中可用。它必须是插入到DOM中的元素,以便事件侦听器不会丢失。

我在这个特定场景中解决问题的方法是只插入HTML,然后在新的HTML上运行$ compile。

Datatables使用fnCreatedRow回调变得容易,在渲染一行之后,回传行的元素并让你用它做任何你想做的事。在这种情况下,我在行上运行$ compile并将其返回给Datatables。请参阅更新后的plunker中的rowCompiler功能。

答案 1 :(得分:0)

因为datatables使用innerHTML = mRender(...)来插入一个html(所以无论如何它会将任何东西转换为字符串,你将失去$ compile函数的结果。我想没有办法用mRender做到没有黑客 - 例如,可以略微更改数据表,因此它将使用$ .append而不是innerHTML。但这不是一个好的做法所以在我们的项目中我们使用通常的jquery绑定而不是ng-click。