【发布时间】:2021-12-09 17:44:16
【问题描述】:
尝试添加验证至少以从mat-select multipe option 中选择最少一个 项。目前在页面加载时显示错误消息,直到用户从选择选项中选择一项,这工作正常。
期望:
当我选择全部或单选时,错误消息应该消失。 (预期和工作正常)。
但是发生了什么:
当我取消选择选定的单个项目时,未显示所需的错误消息。
不知道我做错了什么。
skillForm.component.ts
skillList = [
{ skillId: '0', skillName: 'JS' },
{ skillId: '1', skillName: 'TS' },
{ skillId: '2', skillName: 'JAVA' },
{ skillId: '3', skillName: '.Net' },
];
@ViewChild('pickAllCourse') private pickAllCourse: MatOption;
trainerForm = FormGroup;
constructor(public formBuilder: FormBuilder) { }
this.trainerForm = this.formBuilder.group({
selectedSkills :['', Validators.required, Validators.minLength(1)]
})
pickAll(): void {
if(this.pickAllCourse.selected) {
this.trainerForm.controls.selectedSkills.patchValue([...this.skillList.map((item) => item.deviceId), 0]);
} else {
this.trainerForm.controls.selectedSkills.patchValue([]);
}
}
selectOneItem(all): any {
if (this.pickAllCourse.selected) {
this.pickAllCourse.deselect();
return false;
}
if (this.trainerForm.controls.selectedSkills.value.length === this.skillList.length) {
this.pickAllCourse.select();
}
}
onSubmit(): void{
console.log('form value', this.trainerForm.value)
//
}
skillForm.component.html
<mat-form-field class="selectedSkills">
<mat-select multiple ngDefaultControl formControlName="selectedSkills"
placeholder="Select Device Type">
<mat-option #pickAllCourse (click)="pickAll()" [value]="0">All</mat-option>
<mat-option *ngFor="let i of skillList" [value]="i.deviceId"
(click)="selectOneItem(pickAllCourse.viewValue)">{{ i.skillName }}
</mat-option>
</mat-select>
<span class="text-danger" *ngIf="trainerForm.controls['selectedSkills '].invalid ">This field is required</span>
</mat-form-field>
另外,在提交后端表单时,我需要有关如何构造如下对象的帮助。
skillList: [
{skillId: '0'},
{skillId: '1'}
];
当我执行 console.log this.trainerForm.value 时,我看到的是 skillList: ['0']
【问题讨论】:
-
能否分享您的错误信息?
-
是的。已经更新了我的 SO,@Batajus 你可以跨越
mat-select -
不确定这是否是问题,但我看到了一些东西。当您在 TS 文件中初始化表单时,此
selectedSkills =['', Validators.required, Validators.minLength(1)]可能应该是selectedSkills: ['', Validators.required, Validators.minLength(1)]和:而不是=。 -
@JasonWhite 这不是问题。实际上这是我的错字。看到更新了。谢谢
标签: javascript angular typescript angular-reactive-forms angular-forms