Angular 检测表单中的数据是否已更改

Angular 检测表单中的数据是否已更改,angular,forms,Angular,Forms,在angular应用程序中,我使用的是模板驱动的表单(不是被动表单)。我想向用户显示一个弹出窗口,如果用户关闭了他输入数据的表单 如果用户未在表单中输入任何内容,则可以关闭表单 在反应式表单中,我们可以订阅可观察到的表单的值变化,并检测表单是否发生了变化 我将如何在模板驱动的组件中实现这一点表单。脏的只能在模板内检查,不能在组件文件内检查实际上模板表单是旧的。Angular团队建议使用被动表单。因为它比模板驱动的表单简单且功能强大。 对于您的问题,可以使用模板ref变量,如 例如:#templa

在angular应用程序中,我使用的是模板驱动的表单(不是被动表单)。我想向用户显示一个弹出窗口,如果用户关闭了他输入数据的表单

如果用户未在表单中输入任何内容,则可以关闭表单

在反应式表单中,我们可以订阅可观察到的
表单的值变化
,并检测表单是否发生了变化


我将如何在模板驱动的组件中实现这一点<代码>表单。脏的只能在模板内检查,不能在组件文件内检查

实际上模板表单是旧的。Angular团队建议使用被动表单。因为它比模板驱动的表单简单且功能强大。 对于您的问题,可以使用模板ref变量,如 例如:#templateVar=“ngForm”


使用组件中的templatevar获取对表单的引用

您同样可以订阅模板驱动的表单:

<form #myForm="ngForm" (submit)="myForm.valid && submitForm()">
  <input type="text" id="name"
   required
   [(ngModel)]="model.name" name="name">
</form>

在此之前,我将尝试回答这个问题:为什么要使用模板驱动的表单?我发现与被动表单相比,它更易于使用。。我们不应该使用模板驱动??在html中使用如下所示在comp@ViewChild中使用如下所示('templateVar',{read:false,static:false})templateVar:NgForm;
formChanged:boolean 
@ViewChild("myForm", { static: true }) myForm: NgForm
ngOnInit() {
    this.myForm.form.valueChanges.subscribe(c => {
            this.formChanged = true; 
    });
}

closeForm(){
    if(this.formChanged){
        ...show message
    }else 
        ...close
}