FormControl:setValue不触发输入事件

时间:2018-06-25 14:56:30

标签: angular events angular2-formbuilder

我有一个表单,其中一个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 :(得分:3)

您可以绑定到input,而不是ngModelChange,这两个事件都会触发:

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

请参阅演示:https://stackblitz.com/edit/angular-basic-template-say51l?file=src%2Fapp%2Fautosize.directive.ts

答案 1 :(得分:0)

快速浏览后,您错误拼写了自动调整大小,在您的情况下,它是自动调整大小:

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