Angularjs 带有输入值的orderBy

Angularjs 带有输入值的orderBy,angularjs,Angularjs,我对orderBy筛选器有问题。下面的代码将为我的计划列排序。当我在输入中键入一个值时,过滤器会自动开始按照我的要求对值排序 但是,如果我在输入中键入一个值,使该字符在列表中的位置更高,则输入将在我键入该值之前结束 如果我在输入中键入的值将字符从列表下方删除,则该输入不会关闭,并允许我完成键入值 有人能解释这种行为吗 <tr ng-repeat="char in localChars | orderBy: '-initiative'"> <td>{{char.na

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

{{char.name}
{{char.initiative}

以下是我认为的事件顺序:

  • 用户在输入中键入更改
    char.initiative
    的值
  • 这会导致列表通过
    ng repeat
    重新排序
  • 重新初始化
    ng repeat
    的作用域,导致本地
    show
    变量丢失其值(请记住,
    ng repeat
    有自己的作用域)
  • 要解决此问题,您需要使用来控制模型值实际更新的时间。您可以选择更新模糊或使用去模糊。下面是如何更新blur(我的建议)。您可以在链接中找到有关取消公告的信息

    <input ng-blur="initiative(char)" 
           ng-model="char.initiative" 
           ng-model-options="{ updateOn: 'blur' }"
           type="text" />
    
    
    
    什么是“输入将结束”意思?此外,将方法(
    initiative
    )命名为与属性(
    initiative
    )相同的属性,从长远来看可能会导致混淆。正如您所看到的,输入将根据show的值显示/隐藏。我所说的“收尾”是指它隐藏了。因此,你的
    ng blur
    在你输入之前就触发了,因为值的变化导致列表被重新排序,从而导致输入失去焦点?这似乎是有道理的。但是为什么它在我没有点击输入外部的情况下触发模糊事件呢?事实上,我不认为这是正在发生的事情。我将添加一个带有解释和解决方法的答案。是的,这就成功了。直到现在我才意识到ng车型选项指令。一切都按我的需要进行。谢谢你的帮助!