Angular Js orderBy с входными значениями - PullRequest
0 голосов
/ 26 июня 2018

У меня проблемы с фильтром 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 голосов
/ 26 июня 2018

Вот что я считаю последовательностью событий:

  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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...