gpt4 book ai didi

Angular 4 Reactive Forms 切换隐藏表单元素的验证

转载 作者:太空狗 更新时间:2023-10-29 17:21:38 26 4
gpt4 key购买 nike

我有一个响应式表单,其中加载时不需要任何字段。如果选择了一个选项,将向 formGroup 添加额外的表单元素,那么新显示的字段将全部是必需的。如果昵称字段被隐藏,那么您应该能够很好地提交表单。如果显示昵称,则昵称字段是必需的,并且提交按钮将被禁用,直到昵称字段已满。这是我想要做的事情的示例。

我的问题是,一旦显示/隐藏表单元素,如何启用/禁用验证?

应用程序模块.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';

@NgModule({
imports: [ BrowserModule, FormsModule, ReactiveFormsModule ],
declarations: [ AppComponent, HelloComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }

应用程序组件.ts

import { Component, OnInit } from '@angular/core';
import { Validators, FormControl, FormGroup, FormBuilder } from '@angular/forms';

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
name = 'My Reactive Form';

constructor(
private fb: FormBuilder
) {}

myForm: FormGroup;
showNick: boolean = false;

ngOnInit() {
this.myForm = this.fb.group({
'firstName': new FormControl(),
'nickName': new FormControl('', Validators.required),
'lastName': new FormControl()
})
}

toggleNick() {
this.showNick = !this.showNick;
}
}

app.component.html

<form [formGroup]="myForm">
<div class="my-box">
<label>
First Name
<input type="text" formControlName="firstName">
</label>
</div>
<div class="my-box nickname">
Nickname? &nbsp; <a (click)="toggleNick()">yes / no</a>
</div>
<div class="my-box" *ngIf="showNick">
<label>
Nickname
<input type="text" formControlName="nickName">
<span class="validation-message" *ngIf="!myForm.controls['nickName'].valid && myForm.controls['nickName'].dirty">
This field is invalid
</span>
</label>
</div>
<div class="my-box">
<label>
Last Name
<input type="text" formControlName="lastName">
</label>
</div>
<button [disabled]="myForm.invalid">Submit</button>
</form>

最佳答案

在我的申请中,我有类似的需求。如果用户要求通过文本通知,则需要电话。否则电话号码是可选的。

我写了这个方法:

setNotification(notifyVia: string): void {
const phoneControl = this.customerForm.get('phone');
if (notifyVia === 'text') {
phoneControl.setValidators(Validators.required);
} else {
phoneControl.clearValidators();
}
phoneControl.updateValueAndValidity();
}

它是从 ngOnInit 中的这段代码调用的:

    this.customerForm.get('notification').valueChanges
.subscribe(value => this.setNotification(value));

如果用户更改通知字段(它是一个单选按钮),它会调用传递值的 setNotification 方法。如果值是“文本”通知,它会将手机的验证设置为必需。

否则它会清除电话字段的验证。

然后它必须调用 updateValueAndValidity 以使用这个新验证更新表单信息。

关于Angular 4 Reactive Forms 切换隐藏表单元素的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com