FormControl: setValue не запускает событие ввода - PullRequest
0 голосов
/ 25 июня 2018

У меня есть форма с полем notes, ограниченным текстовой областью.

this.form = this.formBuilder.group({});
this.form.addControl('notes', new FormControl(''));

К шаблону прикреплена директива autoresize.

<textarea formControlName="notes" autosize></textarea>

Такая директива изменяет размерывысота текстовой области каждый раз, когда пользователь изменяет ее содержимое.

@HostListener('input')
public onChange(textArea: HTMLTextAreaElement): void {
    const textarea = this.element.nativeElement.querySelector('textarea');
    this.renderer.setStyle(textarea, 'overflow', 'hidden');
    this.renderer.setStyle(textarea, 'height', 'auto');
    this.renderer.setStyle(textarea, 'height', `${textarea.scrollHeight}px`);
  }

Однако, когда я программно изменяю значение FormControl, событие input не запускается, и текстовая область не изменяется соответственно.

this.form.controls['notes'].setValue('a new value'); // not firing events

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вместо input вы можете связать с ngModelChange, который будет срабатывать при обоих событиях:

@HostListener('ngModelChange') onNgModelChange() {
  console.log('ngModelChange');
}

См. Демонстрацию: https://stackblitz.com/edit/angular-basic-template-say51l?file=src%2Fapp%2Fautosize.directive.ts

0 голосов
/ 25 июня 2018

После быстрого взгляда вы произвели с ошибкой авторазмер, в вашем случае это авторазмер:

<textarea formControlName="notes" autosize></textarea>
...