我的orderBy过滤器出现问题。下面的代码将对我的倡议专栏进行排序。当我在输入中键入一个值时,过滤器会按照我想要的那样自动开始对值进行排序。
但是,如果我在输入中键入一个值,使该字符在列表中更高,则输入将在我完成该值输入之前关闭。
如果我在输入中键入的值将字符放在列表的下方,则该输入不会关闭,并允许我完成输入值。
任何人都可以解释这种行为吗?
<tr ng-repeat="char in localChars | orderBy: '-initiative'">
<td>{{char.name}}</td>
<td ng-hide='show' ng-click='show = true'>{{char.initiative}}</td>
<td ng-show='show'>
<input ng-blur='initiative(char)' ng-model='char.initiative' type="text">
</td>
</tr>
答案 0 :(得分:0)
我认为这是事件的顺序:
char.initiative
的值。ng-repeat
重新排序。ng-repeat
的范围被重新初始化,导致本地show
变量失去其值(请记住,ng-repeat
有其自己的范围)。要解决此问题,您需要使用ng-model-options
来控制何时实际更新模型值。您可以选择在模糊时更新或使用防抖。这是如何在模糊时进行更新(我的建议)。您可以在链接上找到有关防反弹的信息。
<input ng-blur="initiative(char)"
ng-model="char.initiative"
ng-model-options="{ updateOn: 'blur' }"
type="text" />