1

我有一个带有自定义元素指令 ( <uber-table>) 的 Angular 应用程序。<uber-table>应该采用一组对象,将它们呈现为 a<table>并添加一些功能(单击行以将基础对象切换为选中状态,用于实时过滤的搜索框,每行上的操作链接以及每个对象的自定义单击回调) . 我用相关代码创建了一个Plunker 。请注意,Plunker 给出了关于map( Object [object Object] has no method 'map') 的错误,但在本地我没有收到任何错误。

post-link 函数的element参数不是<uber-table>我预期的元素。相反,它是模板的<div class="uber-table">元素。这阻止我从<uber-table>. 我究竟做错了什么?任何帮助都感激不尽。

4

2 回答 2

0

在尝试了几件事并再次查看文档后,我终于让它工作了。解决方案是将函数放在post-link函数内部compile。此外,我必须更新我的隔离范围以使用=、设置replacetrue设置transclude'element'

如果有人想查看更改,我更新了 Plunker 。Plunker 版本不工作,但由于它在本地工作,我不会花太多时间在它上面。

于 2013-11-15T20:21:32.433 回答
0

以下是一些问题的概要。

第一个主要问题是您希望标记中已经存在的现有内容uber-table以及新模板存在。除非另有说明,否则columns这种情况下的现有内容 ( ) 将被覆盖。为了将现有内容包含在具有模板的指令中,您需要transclude:true在模板中设置然后标识需要放置此现有内容的位置,该ng-transclude元素将成为内容的父元素。

这是包含固定的演示

现在出现了新问题,您尝试使用 jQuery 循环columns并返回 angular attrs=> column.attrs。这会引发未定义的错误。

我还没有尝试解决这个问题来解决列问题。他们可能应该由他们自己的指令来处理

更新:这里是使用 jQuery 解析列数的略微修改的无错误版本。恐怕我仍然对此结构感到困惑。我认为不需要使用 jQuery 来解析列,这可以转换为指令或将列定义从控制器范围传递到主指令

于 2013-11-14T23:26:08.837 回答