2013-11-14 37 views
1

我有一个自定义元素指令(<uber-table>)的Angular应用程序。 <uber-table>应该采取对象的集合,将它们渲染为一个<table>并添加一些功能(点击行以将底层对象切换为选定对象,实时筛选的搜索框,每行上的操作链接以及针对每个对象的自定义点击回调目的)。我用相关的代码创建了Plunker。请注意,Plunker给出了一个关于mapObject [object Object] has no method 'map')的错误,但本地我没有收到任何错误。Angular指令失败无声(指令呈现太快?)

后链接功能的element参数不是我所期望的<uber-table>元素。相反,它是模板的<div class="uber-table">元素。这使我无法从<uber-table>中提取数据。我究竟做错了什么?任何帮助都感激不尽。

+0

'map'问题是从演示中不包括jQuery – charlietfl

回答

0

下面是一些问题的简要介绍。

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

这里现在出现demo with transclude fixed

新的问题,你试图在columns使用jQuery循环,并返回角attrs =>column.attrs。这会抛出未定义的错误。

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

更新:这里的slightly revised error free version使用jQuery来分析列数。恐怕这个结构还是让我感到困惑。我没有看到需要使用jQuery来分析柱,这可以转换为指令或将列定义传递到控制器范围的主指令

0

尝试了几件事情并再次查看文档后,我终于找到了它。解决方法是将post-link函数放入compile函数中。此外,我不得不更新我的隔离范围,以使用=,设置replacetrue并将transclude设置为'element'

I updated Plunker如果有人想看到更改。 Plunker版本不起作用,但由于它在本地工作,我不会花太多时间在它上面。