Angular UI Bootstrap Typeahead指令为每个实例创建不同的DOM元素



我正在尝试在几个表中使用Angular UI Bootstrap Typeahead指令。这些表中可能有0到数千个条目,当我将typeahead指令附加到表行中的每个<input>时,它会为每一个创建一个DOM元素!

如果我在页面加载后检查DOM,我可以在HTML的主体上看到数百个<!-- ngIf: isOpen() -->。问题是,所有这些typeahead都使用相同的源列表来为typeahead提供数据,所以从技术上讲,我只需要一个typeahead元素,它只是在我的表中的每个输入上重复使用。

目前,我在typeahead文档中没有看到允许我们创建1个共享typeahead元素的配置属性。有没有什么方法可以在不修改角度引导javascript或不从头开始构建typeahead指令的情况下轻松地实现此功能?

编辑

更糟糕的是,我对表进行了分页,如果在表的"页面"之间进行更改,该指令会为该页面的每个新实例重新创建更多的<!-- ngIf: isOpen() -->。因此,如果该表从10页中的每页100个项目开始,如果用户一次单击分页的每一页,那么他们将在该页上获得1000个<!-- ngIf: isOpen() -->

在包含typeahead指令的单元格上实现某种查看/编辑状态转换。

在带有typeahead指令的输入上使用类似ng-if="row.isEditing"的内容。按照惯例,除非你告诉表不要为每一行创建DOM元素,否则你的表将为它创建一个DOM元素。当你点击要编辑的单元格时,然后更改编辑模式状态,typeahead的DOM元素将按需加载。

这个plunker(有点)像我心目中的方法,但它实现了整个编辑行:http://plnkr.co/edit/ivJQ0C

请注意,在该示例中,在满足ng-if的条件之前,编辑行的DOM元素不存在。

最新更新