【发布时间】:2015-07-22 00:06:06
【问题描述】:
我有一个 HTML 表,其中包含使用 ng-repeat 创建的行和使用对象数组中对象的属性创建的数据。它们按名称列按字母顺序排序。我已经使用 ng-show、ng-focus 和 ng-blur 设置了一些简单的编辑,因此不需要保存按钮或类似的东西。
但是,当我正在编辑名称列时,如果我键入的第一个字母会导致该行在表格中的位置较低,它会在我仍在键入时对表格进行排序。我尝试创建一个“临时”对象数组,将原始数组复制到其中,在编辑时修改“临时”数组,然后在编辑完成后将临时数组复制到原始数组中。那没有用;无论如何,同样的事情发生了。
经过一番研究,我了解到临时数组和原始数组可能都指向相同的数据,因此我尝试了多种克隆数组的方法。我终于让它工作了......有一个例外:当我编辑要排序较低的对象时,它移动了。当我再次尝试编辑它时,它做了各种随机的、意想不到的事情。
经过一些诊断后,我发现表中对象的索引(从 $index 获取)在排序时发生了变化。例如:
Table
-------------------------------------
|Name |Age |Phone |Index |
-------------------------------------
|George |25 |928-7495|0 |
|John |34 |342-0673|1 |
|Megan |28 |834-1943|2 |
|Susan |19 |274-8104|3 |
-------------------------------------
如果我将 George 更改为 Tim,则该对象的索引也变为 3。所有其他索引保持不变。谁能告诉我为什么会发生这种情况和/或就如何解决这个问题给我建议?
【问题讨论】:
-
你无法控制“原始数组”的排序吗?它是通过过滤器完成的吗?您需要提供一些示例代码,以便我们知道发生了什么。
-
@Amine 是的,我有一个过滤器,因为我创建了表格,这样我就可以单击每列的标题来更改排序。
-
需要一些代码来看看你是如何实现它的。
-
有什么例子吗?这是我的第一个问题:)
-
@JFischer00 你能用 plnkr.co 建立一个例子吗?如果不审查您的具体实施,就很难提供帮助。
标签: javascript arrays angularjs angularjs-ng-repeat ng-repeat