2

假设模板有这样的代码片段:

<form #myForm="ngForm">
   <md-input-container>
     <input mdInput name="address" [formControl]="addressCtrl" [(ngModel)]="address" required>
   </md-input-container>
</form>

该组件具有以下内容:

export class AddressComponent {
   @ViewChild("myForm")
   myForm: NgForm;

   addressCtrl = new FormControl();
   address: string;

   constructor() {}

   validate() {
      this.addressCtrl.markAsTouched();
      console.log("Is address valid? " + this.addressCtrl.valid);
      console.log("Is myForm valid? " + this.myForm.form.valid);
   }
}

validate() 由其他一些动作调用,旨在以编程方式触发表单验证。

但是,在控制台日志中,显示 addressCtrl 无效,而 myForm 仍然有效。

如果任何子控件无效,任何人都知道如何将 myForm 状态更新为无效?

谢谢!

4

1 回答 1

1

您正在使用formControl设计为独立的指令,因此它不会在 parent 中注册自己formGroup。如果您显示该组的控件,您将看到您创建的控件不属于该组:

console.log(this.form.value);       // {}
console.log(this.myForm.controls);  // undefined

您需要使用formControlName指令,但为此您必须formGroup在类中创建一个:

  addressCtrl = new FormControl();
  group = new FormGroup({address: this.addressCtrl});

  validate() {
    console.log('Is address valid? ' + this.addressCtrl.valid); // false
    console.log('Is myForm valid? ' + this.group.valid);        // false
  }

和 HTML:

<form [formGroup]="group">
   <md-input-container>
     <input mdInput name="address" formControlName="address" [(ngModel)]="address" required>
   </md-input-container>
</form>
于 2017-07-14T04:57:21.687 回答