Angular 2模板驱动的表单和状态更改

Angular 2模板驱动的表单和状态更改,angular,angular-forms,Angular,Angular Forms,我想知道是否有可能访问Angular 2模板驱动表单中的statusChanges 我尝试了这个答案提供的方法,但不起作用。 我应该将表单重构为反应式的,还是可以使用另一种方法在表单验证状态更改时发出事件 __ 当前不起作用的方法: 组件内TS export class FormComponent implements OnInit { [...] @ViewChild('myForm', { static: false }) myForm; ngAfterVie

我想知道是否有可能访问Angular 2模板驱动表单中的
statusChanges

我尝试了这个答案提供的方法,但不起作用。

我应该将表单重构为反应式的,还是可以使用另一种方法在表单验证状态更改时发出事件

__

当前不起作用的方法:

组件内TS

export class FormComponent implements OnInit {

    [...]

    @ViewChild('myForm', { static: false }) myForm;

    ngAfterViewInit() {
        let c = this.myForm.statusChanges.subscribe(() => {
            console.log(this.myForm.status, "Is form dirty yet: " + this.myForm.dirty);
        });
    }
组件内模板

<form #myForm>
[...]
</form>

[...]
我得到一个
错误类型错误:无法读取未定义的属性'subscribe'
在FormComponent.ngAfterViewInit(form.component.ts:27)


(也定义了this.myForm,但没有属性
statusChanges

问题是您获得了对名为myForm的元素的引用,而不是对该元素承载的NgForm指令的引用

'myForm'
更改为
NgForm
,或使用
read:NgForm
选项

  @ViewChild('myForm', { read: NgForm, static: false })
  myForm: NgForm;

  ngAfterViewInit() {
    this.myForm.statusChanges.subscribe(e => console.log('status changed: ' + e));
  }


另外请注意,您的组件应该在ViewInit之后实现

如果您希望对表单进行更多的编程控制,我强烈建议您切换到反应式表单。@xdecdec这是其他人正在处理的表单的一个巨大重构,我想知道是否可以避免重构。定义“不起作用”。发布一个完整的最小的例子来重现这个问题。非常感谢,我正在努力解决这个问题。