Javascript Angular2表格:正确触发或更新验证&;以编程方式
我正在Angular2-Redux中创建一个向导。我使用反应式表单来处理和提交内部每个步骤的数据。我需要以编程方式触发表单验证,因为我的CalltoAction按钮的声明(为了进入下一步)位于与stepComponent分离的组件中。请参见下面的线框 组件的线框 当前行为Javascript Angular2表格:正确触发或更新验证&;以编程方式,javascript,angular,validation,redux,angular2-forms,Javascript,Angular,Validation,Redux,Angular2 Forms,我正在Angular2-Redux中创建一个向导。我使用反应式表单来处理和提交内部每个步骤的数据。我需要以编程方式触发表单验证,因为我的CalltoAction按钮的声明(为了进入下一步)位于与stepComponent分离的组件中。请参见下面的线框 组件的线框 当前行为 只有在窗体控件上发生更改时,才允许进行其自身的验证 跑。并且它的toucted&valid属性会相应地更新 因为我在Redux环境中,所以我会发送一个操作来获取 要应用于有效负载的当前步骤表单数据。什么时候 完成后,我触发另
toucted&valid
属性会相应地更新 submitForm(form: FormGroup):void{
if(form.valid){
this.actionsStep.saveStep(form.value);
}else{
console.log('Form invalid ')
}
}
this.stepForm = this.formBuilder.group({
name: ['', Validators.required],
email: ['', Validators.required]
});
step-component.html:表单html
<form id="ngForm" [formGroup]="stepForm" (ngSubmit)="submitForm(stepForm.value)" class="form-horizontal form-box-content">
<div class="form-group row" [ngClass]="{'has-danger' :name.invalid && name.touched}">
<label class="col-md-2 col-form-label">Name:</label>
<div class="col-md-10">
<input
name="titulo" class="form-control required"
formControlName="name" placeholder="" type="text" [ngClass]="{'form-control-danger' :name.invalid && name.touched}" >
<small class="form-control-feedback text-danger" *ngIf="name.invalid && name.touched && name.hasError('required')">
The name is required
</small>
</div>
</div>
姓名:
名称是必需的
尝试
我试着用
this.stepForm.updateValueAndValidity()代码>
this.stepForm.updateValueAndValidity({onlySelf:false,emitEvent:true})代码>
for(此.stepForm.controls中的变量i){
this.stepForm.controls[i].markAsTouched();
}
表单
标记内时:
- :只在办公室工作 相同的组件
- :仅在同一组件中工作
- :不工作
- :指上一个链接
(this.stepForm as any).submitted = true
以防其他人仍在试图这样做。我通过使用ViewChild获取引用组件和步进器的引用来实现这一点。然后控制“下一步”按钮,单击按钮时不要使用matStepperNext
<button mat-button (click)="onStepOneNextClick()">Next</button>
@ViewChild(MatStepper) stepper: MatStepper;
@ViewChild(StepOneComponent, { static: true }) stepOneComponent: StepOneComponent;
onStepOneNextClick() {
if (this.stepOneComponent.form.invalid) {
this.stepOneComponent.form.markAllAsTouched();
}
else {
this.stepper.next();
}
}
下一步
@ViewChild(MatStepper)步进器:MatStepper;
@ViewChild(StepOneComponent,{static:true})StepOneComponent:StepOneComponent;
OnStepOneExtClick(){
if(this.stepOneComponent.form.invalid){
this.stepOneComponent.form.markAllAsTouched();
}
否则{
this.stepper.next();
}
}
当前方法面临的问题是什么?能否构建一个最小的工作示例?@HarryNinh,问题是我无法从js触发表单验证。我想知道是否有办法做到这一点。我认为提交表单会导致内部验证运行;但是,我也找不到从js提交的方法。好吧,这么短的版本:1)表单会在每次更新字段值时自动验证;2) 您可以检索表单值并执行HTTP POST请求以提交form@HarryNinh谢谢你。所以,实际上,如果不需要更新或触摸控件,就无法手动验证表单,是吗?