событие focus вызывается перед writeValue () при использовании настраиваемой директивы внутри редактора ячеек ag-Grid

Цель: сделать ячейку ag-Grid доступной для редактирования в качестве валютного контроля.

Подход:

  1. Создал настраиваемую директиву для валюты.
  2. Создал настраиваемый редактор ячеек, который использует эту валютную директиву.

Проблема:

В обычном сценарии при загрузке страницы загружается элемент управления с помощью директивы (реализует ControlValueAccesor) и вызывается writeValue () для инициализации значения в элементе управления. Итак, я отображаю значение с помощью символа валюты ($), используя writeValue (). И когда пользователь нажимает на элемент управления, я показываю значение без символа валюты, записывая логику в событии фокуса.

Теперь, с ag-Grid, директива не загружалась при загрузке страницы. Он будет загружаться при нажатии элемента управления, поскольку он заключен в редактор ячеек. Итак, при щелчке / фокусировке вызывается следующее в следующем порядке:

  1. Событие фокуса - оно установит для контрольного значения значение null, поскольку значение еще не было установлено с помощью writeValue. Но вскоре после этого вызывается writeValue ().
  2. writeValue () - он установит контрольное значение на значение с символом $, что мне не нужно. Я хочу, чтобы значение без символа $ было в фокусе.

Итак, как я могу вызвать writeValue () перед событием фокуса директивы?

Примечание: кстати, функция редактора ячеек с двумя щелчками мыши работает нормально, но мне нужно решение с одним щелчком, так как я установил фокус на элементе управления в afterGuiAttached().


person Suyash Gupta    schedule 17.09.2020    source источник


Ответы (1)


Я смог найти решение, используя setTimeout:

 public afterGuiAttached(): void {
    // Set focus after the value has been written into the control
    setTimeout(() => {
      this.input.nativeElement.focus();
    });
 }

Не нашел лучшего решения. Дайте мне знать, если вы знаете, или найдете лучшее решение. Спасибо.

person Suyash Gupta    schedule 26.09.2020