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

时间:2016-06-13 21:12:17

标签: angular angular2-forms

如何在组件中引用“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>

2 个答案:

答案 0 :(得分:5)

实际上还有另一种方法可以做到这一点。您可以使用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));
  }
}

答案 1 :(得分:0)

为此,您需要利用FormBuilder类和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>

并在组件类中:

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

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