【问题标题】:Angular 2 Model-Driven Form: Adding/Removing items to FormArray doesn't make form dirtyAngular 2 模型驱动表单:向 FormArray 添加/删除项目不会使表单变脏
【发布时间】:2017-04-17 09:51:27
【问题描述】:

我有一个 Angular 2 模型驱动表单,它具有“FormArray”类型的属性。当我向这个表单数组添加或删除项目时,表单本身似乎没有注册任何更改,并且表单没有被“弄脏”。

这是一个显示问题的 plunker:https://plnkr.co/edit/j1S80CmPBF1iHI5ViEia?p=preview

这是从 FormArray 中删除元素的方法:

removeAddress(i: number) {
    const control = <FormArray>this.myForm.controls['addresses'];
    control.removeAt(i);
}

除了手动为表单设置this.myForm.dirty = true 之外,还有其他方法可以检测到此&lt;FormArray&gt; 属性已被更改吗?

【问题讨论】:

    标签: angular angular2-forms


    【解决方案1】:

    通常,脏意味着任何字段中都有一些值更新。

    一个输入是脏的,只有当用户开始输入时(已经弄脏了)。

    但是如果你想在添加或删除任何元素后完全破解它并自己弄脏它:

    如果你想让表单变脏:

           this.myForm.valueChanges.subscribe(()=>{
    
                    this.myForm.markAsDirty();
           });
    

    【讨论】:

    • 好的。很公平。但是模型驱动的表单不应该自动检测到模型中发生了变化并让表单本身变脏吗?
    • 啊.. 明白了。谢谢!
    【解决方案2】:

    AngularJS2 重新添加了双向绑定的概念。

    在 AngularJS2 中,您需要明确指出该控件具有双向绑定。

    https://angular.io/docs/ts/latest/guide/forms.html

    [(ngModel)]="model.name" name="name"

    应该给你你想要的。

    【讨论】:

      猜你喜欢
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2017-01-30
      • 2016-04-26
      • 2020-11-15
      相关资源
      最近更新 更多