GOOGLE ADS

пятница, 29 апреля 2022 г.

Переменный фокус шаблона Angular 4

У меня есть этот шаблон ячейки, который показывает значение объекта в элементе 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, а затем два @ViewChilds. Непонятно, что вызывает focusInput, но, как упомянул @joseph-webber, вы должны передать индекс этому вызову, например:

private focusInput(index){
this['myInput' + index].nativeElement.focus();
this['myInput' + index].nativeElement.select();
}

если у вас много входных данных, этот подход может запутаться, поэтому вам может потребоваться использовать ViewChildren вместо ViewChild

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...