У меня есть этот шаблон ячейки, который показывает значение объекта в элементе span или, если строка редактируется, показывает значение внутри ввода.
<ng-template ngx-datatable-cell-template let-rowIndex="rowIndex" let-row="row" let-value="value">
<span
*ngIf="!editing[rowIndex]">
{{value}}
</span>
<input
#myInput
autofocus
(blur)="setValue($event, value, row)"
*ngIf="editing[rowIndex]"
type="text"
[value]="value"
/>
</ng-template>
Когда я нажимаю кнопку редактирования, мне нужно сфокусироваться и выделить текст. Нет проблем с этим. У меня есть
@ViewChild('myInput') myInput;
и
private focusInput(){
this.myInput.nativeElement.focus();
this.myInput.nativeElement.select();
}
Проблема в том, что если мне нужно редактировать «одновременно» 2 строки, после нажатия кнопки редактирования 1-й строки выбирается и фокусируется, но когда я нажимаю кнопку редактирования 2-й строки, 1-й ввод снова получает фокус. Я думаю, что angular находит первый доступный элемент #myinput и фокусирует его, потому что, если я щелкну строку с номером 5 в первую очередь, она правильно сфокусируется, и когда любая из предыдущих строк помечена для редактирования, поведение в порядке.
Как я могу заставить это работать для каждой строки, даже если в шаблоне присутствуют другие #myinput?
Решение проблемы
Если у вас всего 2 входа, я бы назвал первый #myInput1
и второй #myInput2
, а затем два @ViewChild
s. Непонятно, что вызывает focusInput
, но, как упомянул @joseph-webber, вы должны передать индекс этому вызову, например:
private focusInput(index){
this['myInput' + index].nativeElement.focus();
this['myInput' + index].nativeElement.select();
}
если у вас много входных данных, этот подход может запутаться, поэтому вам может потребоваться использовать ViewChildren вместо ViewChild
Комментариев нет:
Отправить комментарий