angular - FormGroup 验证模型绑定相互覆盖 angular 8
问题描述
因为我有一个名为Staff.ts的模型,其中包含以下代码。
import {NgForm,
FormGroup,
FormControl,
Validators,
FormBuilder} from '@angular/forms'
export class Staff {
Id:number = null;
FirstName:string = "";
LastName:string = "";
UserName:string = "";
Email:string = "";
Title:string = "";
CellPhoneNo:number = 0;
PhoneNo:number = 0;
Fax:number = 0;
Type:string = "0";
Status:string = "0";
ProfilePic:string = "";
CreatedDate:Date=null;
UpdatedDate:Date=null;
CreatedBy:string="";
UpdatedBy:string="";
SendEmail:boolean = false;
SendPhone:boolean = false;
Password:string = "";
CnfPassword:string = "";
FormStaffGroup: FormGroup = null;
constructor(){
var _builder = new FormBuilder();
this.FormStaffGroup = _builder.group({}); //Use the builder to create
//control --> validation and 1 validation
this.FormStaffGroup.addControl("StaffTextControl",
new FormControl('',Validators.required));
//customer code control with required and 4 letter numeric collection
let ValidTelephoneCollection = [];
ValidTelephoneCollection.push(Validators.required);
ValidTelephoneCollection.push(Validators.pattern("^[0-9]{10,10}$"));
this.FormStaffGroup.addControl("StaffTelephoneControl",
new FormControl('',Validators.compose(ValidTelephoneCollection)));
//ValidTelephoneCollection.pop(Validators.required);
//this.FormStaffGroup.addControl("StaffPhoneControl",
// new FormControl('',Validators.compose(ValidTelephoneCollection)));
let ValidUserNameCollection = [];
ValidUserNameCollection.push(Validators.required);
ValidUserNameCollection.push(Validators.pattern("^[A-Za-z0-9]{0,10}$"));
this.FormStaffGroup.addControl("StaffUserNameControl",
new FormControl('',Validators.compose(ValidUserNameCollection)));
let ValidEmailCollection = [];
ValidEmailCollection.push(Validators.required);
ValidEmailCollection.push(Validators.pattern("^[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\\.[a-z]{2,3}$"));
this.FormStaffGroup.addControl("StaffEmailControl",
new FormControl('',Validators.compose(ValidEmailCollection)));
}
我有一个名为StaffInfo.ts的组件,它在其中导入了这个Staff.ts模型,StaffInfo.ts现在有一个templateUrl: './StaffInfo.html'
验证正在处理这个 HTML 页面的 post 方法,现在我试图在路由期间在页面加载时绑定模型也在发生,但问题是它继续覆盖其他模型,下面是一个示例。
我怀疑模型绑定问题是在Staff.ts上同样有验证。
this.FormStaffGroup.addControl("StaffTextControl",
new FormControl('',Validators.required));
并且
this.FormStaffGroup.addControl("StaffTelephoneControl",
new FormControl('',Validators.compose(ValidTelephoneCollection)));
两者都被多次调用以进行验证,例如名字、姓氏、职务、密码和确认密码,使用StaffTextControl进行强制目的。它被绑定的代码如下。
async ngOnInit() {
await this.StaffModel;
this.StaffModel.FirstName = 'rrrraaaww';
this.StaffModel.LastName = 'kummmmm';
this.StaffModel.UserName = 'aaaww101';
this.StaffModel.Email = 'aaaww@email.com';
this.StaffModel.Title = 'Mr.';
this.StaffModel.Fax = 123123123;}
我怎样才能停止这种覆盖。
下面是 StaffInfo.html 的 HTML 模板。
<form [formGroup]="StaffModel.FormStaffGroup">
<div class="row m-t-15" style="background:#FFF; padding-right:2%;padding-bottom:5%;">
<div class="form-group row m-b-10">
<label class="col text-md-right col-form-label">First Name *</label>
<div class="col">
<input type="text" formControlName = "StaffTextControl" [(ngModel)]="StaffModel.FirstName" name="firstname" placeholder="" class="form-control">
</div>
<label class="col text-md-right col-form-label">Last Name *</label>
<div class="col">
<input type="text" formControlName = "StaffTextControl" [(ngModel)]="StaffModel.LastName" name="lastname" placeholder="" class="form-control">
</div>
</div>
<div class="form-group row m-b-10">
<label class="col text-md-right col-form-label">User Name*</label>
<div class="col">
<input type="text" formControlName = "StaffUserNameControl" [(ngModel)]="StaffModel.UserName" name="username" placeholder="" class="form-control">
</div>
<label class="col text-md-right col-form-label">Email*</label>
<div class="col">
<input type="text" formControlName = "StaffEmailControl" [(ngModel)]="StaffModel.Email" name="email" placeholder="" class="form-control">
</div>
</div>
<div class="form-group row m-b-10">
<label class="col text-md-right col-form-label">Title</label>
<div class="col">
<input type="text" formControlName = "StaffTextControl" [(ngModel)]="StaffModel.Title" placeholder="" class="form-control">
</div>
<label class="col text-md-right col-form-label">Cell Phone Number</label>
<div class="col">
<input type="text" formControlName = "StaffTelephoneControl" [(ngModel)]="StaffModel.CellPhoneNo" name="Cell Phone Number" placeholder="" class="form-control">
</div>
</div>
<div class="form-group row m-b-10">
<label class="col text-md-right col-form-label">Phone Number*</label>
<div class="col">
<input type="text" formControlName = "StaffTelephoneControl" [(ngModel)]="StaffModel.PhoneNo" name="ic" placeholder="" class="form-control">
</div>
<label class="col text-md-right col-form-label">Fax</label>
<div class="col">
<input type="text" formControlName = "StaffTelephoneControl" [(ngModel)]="StaffModel.Fax" name="Fax" name="Fax" placeholder="" class="form-control">
</div>
</div>
<div class="form-group row m-b-10">
<label class="col text-md-right col-form-label">Password*</label>
<div class="col">
<input formControlName = "StaffTextControl" [(ngModel)]="StaffModel.Password" type="password" name="ic" placeholder="" class="form-control">
</div>
<label class="col text-md-right col-form-label">Confirm Password*</label>
<div class="col">
<input formControlName = "StaffTextControl" [(ngModel)]="StaffModel.CnfPassword" type="password" name="ic" placeholder="" class="form-control">
</div>
</div>
解决方案
正如我所想,您只能将 1 个控件绑定到 1 个元素才能使其正常工作。所以formControlName = "StaffTextControl"你需要制作一个firstNameControl和lastNameControl。其他控件相同
推荐阅读
- r - R通过组合两个变量的共同值来重塑数据
- python - 在python函数中如何传递一个可选参数进行过滤
- java - 关于如何创建守护线程来监控地图的最佳实践
- vba - 错误 1004 宏 Excel
- ms-access - 密码保护表单访问
- html - 将光标设置为元素的默认样式或元素:悬停?
- windows - 安装 choco 后,gitlab-ci 在 refreshenv 后退出作业
- javascript - jquery UI 滑块,更改事件显示 *递归过多*
- java - 点燃 SqlQuery 超时和取消 - 如果/何时抛出 QueryCancelledException
- excel - 将 If 语句与 Vlookup 结合使用