Я пытаюсь создать встроенное редактирование для таблицы (аналогично angular-xeditable ), но я хочу разрешить редактирование только одной строки за раз. В настоящее время вы можете любое количество строк быть в режиме редактирования.
Параметры
Держите список строк в режиме редактирования, и как только новая строка будет выбрана для редактирования, выполните цикл по списку и принудительно выйдите из режима редактирования, поместите строку запроса в режим редактирования и добавьте ее в список. По сути, это позволит содержать не более 1 строки в списке, что приведет к возможности редактирования одной строки за раз. Но я не показываю, как вывести строки из режима редактирования.
Есть кнопка отмены, которая выходит из режима редактирования. Так что, возможно, используйте jquery (или angular.element), чтобы получить список всех кнопок отмены и прагматично щелкнуть их - опять же, принудительно выйдя из строк в режиме редактирования, но это может замедлить работу для большой таблицы, поскольку она будет нажимать кнопку отмены на строки, которые даже не находятся в режиме редактирования.
<table class="table table-striped">
<thead>
<tr>
<th id="th-name">Name</th>
<th id="th-age">Age</th>
<th id="th-actions">Actions</th>
</tr>
</thead>
<tr ng-repeat="contact in model.contacts">
<td>
<span ng-show="edit != true">{{contact.name}}</span>
<input ng-show="edit" type="text" ng-model="model.selected.name" class="form-control" placeholder="Name">
</td>
<td>
<span ng-show="edit != true">{{contact.age}}</span>
<input ng-show="edit" type="text" ng-model="model.selected.age" class="form-control" placeholder="Name"></td>
<td>
<button ng-show="edit != true" id="table-edit" ng-click="edit = true; editContact(contact)" uib-tooltip="Delete" tooltip-trigger="mouseenter" tooltip-placement="bottom"><i class="fa fa-fw fa-pencil"></i></button>
<button ng-show="edit" id="table-save" ng-click="edit = false; saveContact($index)" uib-tooltip="Delete" tooltip-trigger="mouseenter" tooltip-placement="bottom"><i class="fa fa-fw fa-floppy-o"></i></button>
<button ng-show="edit" id="table-cancel" ng-click="edit = false; reset()" uib-tooltip="Delete" tooltip-trigger="mouseenter" tooltip-placement="bottom"><i class="fa fa-fw fa-trash"></i></button>
</td>
</tr>
</table>
Вот демонстрация plunker (позволяет всем строкам быть в режиме редактирования): Plnkr Demo`
Вот рабочая демонстрация того, чего я хочу достичь, но она использует шаблоны. На мой взгляд, он вызывает getTemplate слишком много раз (вызывает его каждый раз, когда запускается дайджест — нажатие кнопок, ввод текста, отображение всплывающей подсказки). Рабочая демонстрация (с использованием шаблонов)