【发布时间】:2021-09-18 19:52:11
【问题描述】:
我正在处理带有单选按钮输入的表单(使用 PrimeNg ui,但这与手头的问题无关紧要),其中每个单选按钮组都由 API 填充到表单组中。在我的AppComponent 中,我正在填充数据,这就是来自 API 的方式(示例的静态数据):
ngOnInit() {
this.settingsByCategory = [
{
categoryName: 'None',
permissions: [
{
id: 1,
name: 'Test Category 1'
},
{
id: 2,
name: 'Test Category 2'
},
{
id: 9,
name: 'Test Category 3'
}
]
}
];
this.settingForm = this.fb.group({
settings: this.fb.array([])
});
this.setForm();
}
setForm() {
this.settingsByCategory.forEach(i => {
i.permissions.forEach(p => {
(this.settingForm.get('settings') as FormArray).push(
this.fb.group({
settingId: p.id,
settingName: p.name,
permission1: null,
permission2: null,
permission3: null
})
);
});
});
}
问题是,当我选择一个单选按钮时,会选择所有组,而不是只选择一个组。
在我的 HTML 中,我使用 FormGroup、FormArrayName 和 FormControls 的嵌套分组来填充适当的数据。这有点乱,但我首先尝试解决这个问题:
<ng-container>
<div>
<form [formGroup]="settingForm">
<div formArrayName="settings" class="perm-grid">
<div *ngFor="let setting of settings.controls; index as i">
<div [formGroupName]="i">
<h2 style="border-bottom: 1px solid #495057; padding-left: 5px">{{ setting.value.settingName }}</h2>
<ul class="perm-list">
<li class="radio-grid">
<div class="radio-grid-row">
<div style="margin-left: 5px"></div>
<div>Company</div>
<div>Area</div>
<div>Location</div>
</div>
<div class="radio-grid-row">
<div style="margin-left: 5px">None</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission1"
formControlName="permission1" [value]=0>
</p-radioButton>
</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission2"
formControlName="permission2" [value]=0>
</p-radioButton>
</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission3"
formControlName="permission3" [value]=0>
</p-radioButton>
</div>
</div>
<div class="radio-grid-row">
<div style="margin-left: 5px">View</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission1"
formControlName="permission1" [value]=1>
</p-radioButton>
</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission2"
formControlName="permission2" [value]=1>
</p-radioButton>
</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission3"
formControlName="permission3" [value]=1>
</p-radioButton>
</div>
</div>
<div class="radio-grid-row">
<div style="margin-left: 5px">Edit</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission1"
formControlName="permission1" [value]=2>
</p-radioButton>
</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission2"
formControlName="permission2" [value]=2>
</p-radioButton>
</div>
<div>
<p-radioButton (onClick)="logRadio($event, setting)" name="permission3"
formControlName="permission3" [value]=2>
</p-radioButton>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</form>
</div>
</ng-container>
对于标准输入,我使用了这种方法,并且效果很好。为什么所有单选按钮表单控件都在组间重复?
【问题讨论】:
标签: javascript angular typescript primeng angular-forms