angular - 当该面板的表单组无效时如何打开mat-expansion-panel?
问题描述
我有formArray
多个formGroups
. 每个都formGroup
在扩展面板内。现在,当我单击"Check what's missing"
按钮时,表单验证运行并显示无效表单字段的错误。但是如果 mat-expansion-panel 关闭了,就看不到哪些字段是无效的。当我检查表单验证时,我希望formGroup
打开无效的扩展面板,以便用户可以看到哪些表单字段无效。我添加了代码供您参考:
<!-- Personal Form inside Expansion Panel Personal -->
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>
Personal
</mat-panel-title>
</mat-expansion-panel-header>
<app-personal-form [form]="form"></app-personal-form>
</mat-expansion-panel>
<!-- Work Form inside Expansion Panel Work -->
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>
Work
</mat-panel-title>
</mat-expansion-panel-header>
<app-work-form [form]="form"></app-work-form>
</mat-expansion-panel>
<!-- Address Form inside Expansion Panel Work -->
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>
Address
</mat-panel-title>
</mat-expansion-panel-header>
<app-address-form [form]="form"></app-address-form>
</mat-expansion-panel>
<div class="top-15" align="end">
<button class="btn-success" mat-raised-button [disabled]="form.valid" (click)="form.showErrors()">Check what's missing</button>
<button class="btn-success" mat-raised-button [disabled]="!form.valid || !form.dirty" (click)="save()">Save</button>
</div>
解决方案
请看看这是否对您有帮助:
import { Component, Input,ApplicationRef} from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
myForm: FormGroup
expanded = []
errorPanles = []
formSubmitted = false
constructor(private fb: FormBuilder,private appRef: ApplicationRef) { }
ngOnInit() {
this.myForm = this.fb.group({
personal: this.fb.group({
fname: ['', [Validators.required]],
lname: ['']
}),
work: this.fb.group({
designation: ['', [Validators.required]],
department: ['', [Validators.required]],
})
});
}
send(form) {
this.formSubmitted = true
this.expanded = []
this.errorPanles = []
this.appRef.tick();
for (var key in form.controls) {
if (form.controls[key].valid === false) {
this.expanded.push(key)
}
}
this.errorPanles = this.expanded
if(this.errorPanles.length>0){
// Form will not submit and material panel with error will open
}else{
// do whatever you want in case no error
}
}
}
https://stackblitz.com/edit/angular-s59zmn
我也在 Angular 中学习阶段。
推荐阅读
- laravel - 在 Laravel 中,如何使用 Query Builder(或 Eloquent)对子查询中的行进行编号?
- json - 使用 gson 加载 JSON
- reactjs - 对于基于类的组件,useRouteMatch 的等价物是什么?
- javascript - 如何从字符串化数组中删除引号
- c++ - 错误:从基类父亲派生类儿子时未定义基类
- python-3.x - 如何使用 python 在 xlsxwriter 中添加标注
- visual-studio-code - 使 Visual Studio Code 始终显示错误,即使在关闭有错误的文件后也是如此?
- tcl - 使用 tcl glob 进行通配符搜索
- javascript - 按子值寻址 Firebase 对象,然后修改该对象?
- algorithm - 如果我切割不同长度的杆,我如何获得 2^(n-1) 的结果总数?其中 n 是杆的长度