角度Js顺序通过输入值

时间:2018-06-26 17:12:22

标签: angularjs

我的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>

1 个答案:

答案 0 :(得分:0)

我认为这是事件的顺序:

  1. 用户输入内容会更改char.initiative的值。
  2. 这会导致列表通过ng-repeat重新排序。
  3. ng-repeat的范围被重新初始化,导致本地show变量失去其值(请记住,ng-repeat有其自己的范围)。

要解决此问题,您需要使用ng-model-options来控制何时实际更新模型值。您可以选择在模糊时更新或使用防抖。这是如何在模糊时进行更新(我的建议)。您可以在链接上找到有关防反弹的信息。

<input ng-blur="initiative(char)" 
       ng-model="char.initiative" 
       ng-model-options="{ updateOn: 'blur' }"
       type="text" />