angular - 当我根据条件隐藏输入时,反应形式 Angular 10 未提交
问题描述
我有一个反应表单,其中包含几个文本框和用于显示/隐藏文本框的单选框。我的要求是,当我提交表单时,应根据单选框选择提交名字或姓氏。但是当我隐藏任何一个字段表单时都没有提交。这是下面的代码
app.component.html
<div class="card m-3">
<h5 class="card-header">Angular 10 Reactive Form Validation</h5>
<div class="card-body">
<form [formGroup]="registerForm" (ngSubmit)="onSubmit()">
<div class="form-row">
<div class="form-group col">
<label>Title</label>
<select formControlName="title" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.title.errors }">
<option value=""></option>
<option value="Mr">Mr</option>
<option value="Mrs">Mrs</option>
<option value="Miss">Miss</option>
<option value="Ms">Ms</option>
</select>
<div *ngIf="submitted && f.title.errors" class="invalid-feedback">
<div *ngIf="f.title.errors.required">Title is required</div>
</div>
</div>
<div ><input (click)="firstName()" name="fname" type="radio"> show first name</div>
<div ><input (click)="secondName()" name="fname" type="radio"> show first name</div>
<div class="form-group col-5" *ngIf="firstNames">
<label>First Name</label>
<input type="text" formControlName="firstName" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.firstName.errors }" />
<div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
<div *ngIf="f.firstName.errors.required">First Name is required</div>
</div>
</div>
<div class="form-group col-5" *ngIf="!firstNames">
<label>Last Name</label>
<input type="text" formControlName="lastName" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.lastName.errors }" />
<div *ngIf="submitted && f.lastName.errors" class="invalid-feedback">
<div *ngIf="f.lastName.errors.required">Last Name is required</div>
</div>
</div>
</div>
<div class="text-center">
<button class="btn btn-primary mr-1">Register</button>
<button class="btn btn-secondary" type="reset" (click)="onReset()">Cancel</button>
</div>
</form>
</div>
</div>
app.component.ts
import { Component, HostListener } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ReCaptchaV3Service } from 'ngx-captcha';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'testproject';
registerForm: any;
siteKey: any;
submitted = false;
firstNames = true;
constructor(private formBuilder: FormBuilder, private reCaptchaV3Service: ReCaptchaV3Service) { }
ngOnInit() {
this.registerForm = this.formBuilder.group({
title: ['', Validators.required],
firstName: ['', Validators.required],
lastName: ['', Validators.required],
});
}
firstName(){
this.firstNames = true;
}
secondName(){
this.firstNames = false;
}
get f() { return this.registerForm.controls; }
onSubmit() {
this.submitted = true;
// stop here if form is invalid
if (this.registerForm.invalid) {
return;
}
// display form values on success
alert('SUCCESS!! :-)\n\n' + JSON.stringify(this.registerForm.value, null, 4));
}
onReset() {
this.submitted = false;
this.registerForm.reset();
}
}
解决方案
推荐阅读
- swift - 为什么 UITableView 为每个单元格显示相同的视图?
- reactjs - Jest Unit Test - 使用道具模拟组件
- android - Xamarin.Forms android WebView 空白,没有有效的 SSL 证书(开发环境)
- r - R查找按访问ID细分的总计数
- vb.net - 数据表到 Crystal Reports(缺少字段)
- javascript - 如何在不同的时间触发不同的 setInterval 函数?
- python - 使用 openpyxl 删除现有数据验证
- linux - 跳过 Sendmail 的队列
- django - 如何在 django 中设置多个自定义应用程序的路径?
- javascript - 无法向下拉菜单 css html 添加过渡