テーブルに一連のアイテムをリストする 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>
テーブル ヘッダーをクリックすると、並べ替え順序を設定できます。各データ行の 2 列目のセルは「その場で」編集可能です。テキストをクリックすると入力テキスト ボックスに置き換えられ、ユーザーはテキストを編集できます。それを可能にする小さな指示があります。これはすべて機能します。
編集中に問題が発生します。「説明」(2列目)でソートするように設定したとします。次に、入力ボックスに入力しているときに (edit-in-place ディレクティブを使用して) 説明を編集すると、並べ替え順序が変更されます。最初の数文字を変更すると、角度が再ソートされ、アイテムがカーソルの下になくなります。また、集中していません。リストを調べて、再ソートされた場所を見つける必要があります。その後、再び焦点を合わせて、入力を再開できます。
これはちょっと不自由です。
私がやりたいことは、(a) 入力ボックスにキーを入力している間に再ソートを停止するか、(b) 編集が始まる前の順序を保持する別の (表示されていない) インデックス値でソートするように angular に指示することです. しかし、私はそれらのいずれかを行う方法がわかりません。誰でも私にヒントを与えることができますか?
これはちょっと複雑なので、何が起こっているのかを示すために plunkr をまとめてみます。