我有一个AngularJS应用程序,它将一堆项目列在表格中。就像这样:
<table class='unstyled tmain'>
<tr>
<td ng-click='setSort($event)'>X</td>
<td ng-click='setSort($event)'>Desc</td>
<td ng-click='setSort($event)'>created</td>
<td> </td>
</tr>
<tr ng-repeat="item in items | orderBy:itemNormalizationFunction:sortReverse">
<td><input type='checkbox' ng-model='item.done'
ng-click='onCheckedChanged(item)'/></td>
<td><div edit-in-place="item.text"
on-save="updateItemText(value,previousValue,item)"></div></td>
<td><span class='foo'>{{item.created | dateFormatter}}</span></td>
</tr>
</table>
表头可点击以设置排序顺序。每行数据中第二列的单元格是可编辑的“就地” - 如果您单击文本,它将被替换为输入文本框,并且用户可以编辑文本。我有一个小指令来启用它。这一切都很正常。
问题出现在编辑时。假设我将其设置为按“描述”(第二列)排序。然后,如果我通过“就地编辑指令”编辑描述,当我在输入框中键入时,排序顺序会更改。如果我更改了前几个字符,那么Angular会重新排序,并且该项不再在我的光标下。甚至也没有聚焦。我必须在列表中寻找到它被重新排序到哪里,然后重新聚焦并恢复键入。
这有点糟糕。
我想要做的是告诉angular停止在我键入输入框时重新排序,或者对保留编辑开始之前排序的分离(未显示)索引值进行排序。但我不知道如何做到这两种情况。有人能给我提示吗?
我知道这有点复杂,所以我会尝试创建一个plunkr以展示正在发生的事情。