angular2 表单验证:获取 ngForm 的实例

angular2 form validation: get an instance of ngForm

如何在组件中引用 "myform"?可能吗? 必须使用 formbuilder(我尽量避免使用它)?

<form #myForm="ngForm">
    <label class="col-sm-12" [class.ng-invalid]="!(value.valid || Value.pristine)">Value</label>
    <input type="text"  required ngControl="value" #value="ngForm" class="form-control text-center" [(ngModel)]="value" />
  </form>

为此,您需要利用 FormBuilder class 和 ngFormModel 指令。 ngFormngControl 在线用于内嵌表单。

这是一个示例:

<form [ngFormModel]="myForm">
  <label class="col-sm-12"
    [class.ng-invalid]="!(myForm.controls.value.valid || myForm.controls.value.pristine)">Value</label>
  <input type="text" [ngControlControl]="myForm.controls.value" 
         class="form-control text-center" [(ngModel)]="value" />
</form>

并且在组件 class 中:

@Component({
  (...)
})
export class SomeComponent {
  constructor() {
    this.myForm = builder.group({
      value: ["", Validators.required],
    })
  }
}

有关详细信息,请参阅本文:

实际上还有另一种方法可以做到这一点。您可以使用 ViewChild 注释,此处您的示例已改编:

<form #myForm="ngForm">
<label class="col-sm-12" [class.ng-invalid]="!(value.valid || Value.pristine)">Value</label>
<input type="text"  required ngControl="value" #value="ngForm" class="form-control text-center" [(ngModel)]="value" />

class MyForm {
  @ViewChild('myForm') form;
  ngAfterViewInit() {
    console.log(this.form)
    this.form.control.valueChanges
      .subscribe(values => console.log(values));
  }
}