javascript - 角度反应形式patchValue或setValue不起作用 - Angular 10
问题描述
我正在使用响应式表单,一切都很好,但是当我修补值时,它们没有更新。我也尝试了 patchValue 和 setValue ,但似乎没有任何效果。下面是我的代码
ngOnInit(){
this.profileForm = this.fb.group({
'name': ['', Validators.required],
'email': ['', [Validators.required, Validators.email]],
'phNumber': ['', Validators.required],
'gender': ['', Validators.required],
'address': ['', Validators.required],
'city': ['', Validators.required],
'state': ['', Validators.required],
'pincode': ['', Validators.required]
});
}
修补值
let response = res['expert'];
this.profileForm.setValue({
name: response.full_name,
email: response.expert_email,
phNumber: response.expert_mobile,
address: response.addresss,
city: response.city,
state: response.state,
pincode: response.pincode,
gender: response.id_gender
});
如果我使用 setValue 会出现此错误
如果我使用patchValue,表单值会被设置,
after = {"name":"Test Name","email":"testa@gmail.com","phNumber":"9632587410","gender":1,"city":"Adilabad","state":"ANDHRA PRADESH","pincode":"2352"}
<section class="marginBoxModelForProfile">
<form [formGroup]="profileForm">
<h6 class="text-left circularBold"><b>Complete Profile Details</b></h6>
<p class="text-left circularBold grey5F font-size14">Min 300 Rs. Explanation about how they can choose and
why they should choose the right fields. A link and details on how to join will be included in your
booking confirmation email.</p>
<input type="text" class="education-inputs w-100 mt-3" placeholder="Name" formControlName="name"
[ngClass]="{'input-error': submitted && profileForm.controls.name.invalid}">
<div class="mt-3 text-left">
<!-- <ng-container *ngFor="let gender of genders">
<input type="radio" name="gender" id="gender" class="mr-1" value="">
<span class="mr-5" formControlName="gender">
{{gender.gender_name}}
</span>
</ng-container> -->
<input type="radio" name="gender" id="gender" class="mr-1" [value]="1" (change)="onChangeGender($event)"> <span class="mr-5"
formControlName="gender">Male</span>
<input type="radio" name="gender" id="gender" class="mr-1" [value]="2" (change)="onChangeGender($event)"> <span class="mr-5"
formControlName="gender">Female</span>
<input type="radio" name="gender" id="gender" class="mr-1" [value]="3" (change)="onChangeGender($event)"> <span class="mr-5"
formControlName="gender">Other</span>
</div>
<div class="input-group mt-3">
<div class="input-group-prepend">
<span class="input-group-text contactNumber-addon" id="basic-addon1"
[ngClass]="{'input-error': submitted && profileForm.controls.phNumber.invalid}">+91</span>
</div>
<input type="text" class="form-control contactnumber-input" placeholder="Contact Number"
aria-label="contactNumber" aria-describedby="basic-addon1" formControlName="phNumber"
[ngClass]="{'input-error': submitted && profileForm.controls.phNumber.invalid}">
</div>
<input type="email" class="education-inputs w-100 mt-3" placeholder="Email" formControlName="email"
[ngClass]="{'input-error': submitted && profileForm.controls.email.invalid}">
<input type="text" class="education-inputs w-100 mt-3" placeholder="Address" formControlName="address"
[ngClass]="{'input-error': submitted && profileForm.controls.address.invalid}">
<p class="font-size12 grey8E circularBook text-left mt-2">We use this detail to generate invoices and use it
for tax purposes.</p>
<div>
<input type="text" class="education-inputs w-100 mt-3" placeholder="Pincode" formControlName="pincode"
[ngClass]="{'input-error': submitted && profileForm.controls.pincode.invalid}"
(change)="onChangePincode($event)">
</div>
<div class="text-left">
<select name="city" id="city" class="education-inputs mt-3 mr-1 w-50" formControlName="city"
[ngClass]="{'input-error': submitted && profileForm.controls.city.invalid}">
<option value="{{city}}">{{city}}</option>
</select>
<select name="state" id="state" class="education-inputs mt-3 state-dropdown" formControlName="state"
[ngClass]="{'input-error': submitted && profileForm.controls.state.invalid}">
<option value="{{state}}">{{state}}</option>
</select>
</div>
</div>
</form>
</section>
我也使用了patchValue,请帮助我做错了什么。我正在使用 v10。
任何帮助深表感谢。
提前致谢!
解决方案
第一个错误
问题response.addresss
是undefined
正如您所说,您可以简单地使用patchValue()
来设置所有定义的值,并且应该可以正常工作
如果您出于任何原因需要使用setValue
,则可以将行更改address: address: response.addresss,
为
address: response.addresss ? address: response.addresss: '',
我们只是检查地址的值是否存在,如果不设置为''
第二个错误
考虑下面的代码
<input type="radio" name="gender" id="gender" class="mr-1" value="">
<span class="mr-5" formControlName="gender">{{gender.gender_name}}</span>
由于错误状态span
元素没有ValueAccessor
Just move the formControlName="gender"
attribute to the input
tag
<input formControlName="gender" type="radio" id="gender" class="mr-1" [value]="gender.value">
<span class="mr-5">{{gender.gender_name}}</span>
推荐阅读
- java - 如何在控制器中获取http请求和查询字符串参数
- php - 如何使用 DataTable 和 Codeigniter 创建 ajax 请求以在同一文件中运行和返回
- r - R,在循环错误后继续使用参数组合
- python - 如何在 Django 中不使用模型或身份验证来存储用户的购物车信息?
- rust - as_deref 函数不会改变我的具体类型
- extjs - 如何在 ext js 中实现进度指示器
- sql - 如何更新 postgresql jsonb 字段中的数组?
- python - 使用元组索引 Numpy 数组维度
- python - 尝试安装 Naoqi Python-SDK 时出现问题:“SystemError:动态模块未正确初始化”
- android - 在更新的flutter_windows_v1.12.13+hotfix.8-stable中出现以下错误