angular - 我应该如何使用 Angular 6 处理我的动态复选框
问题描述
我有一组来自 webservice: 的类别categories
,以及一个包含选定类别的数组:selectedCategories
要显示所有复选框,我会:
<form [formGroup]="formGroup" (ngSubmit)="onSubmit()">
<div class="row">
<div *ngFor="let category of categories">
<input type="checkbox" class="custom-control-input" [id]="category.id" formControlName="category"
[checked]="categoriesSelected?.includes(category.id)">
<label class="custom-control-label" [for]="category.id">{{ category.name | translate }}</label>
</div>
</div>
</form>
这很好用。
然后我建立我的formGroup:
ngOnInit() {
this.categoriesSelected = this.championships.map(championship => championship.category.id);
this.formGroup = this.formBuilder.group({
categories: this.formBuilder.array([{}])
});
}
现在,我需要的输出只是所选类别的 ID。
我对链接formBuilder和formGroup有点迷茫。
如果我formControlName="categories"
在模板中添加input
标签,所有数据都会消失。
我应该怎么做?
解决方案
你很接近了,你只需要categoriesSelected
进入this.formBuilder.array()
并进行一些轻微的标记编辑。在您的组件中:
constructor(private formBuilder: FormBuilder) {
this.myGroup = this.formBuilder.group({
myCategory: this.formBuilder.array(this.categoriesSelected)
});
}
您可以使用 ngFor 的索引来访问单独的categories
数组以标记复选框:
<form [formGroup]="myGroup">
<div *ngFor="let category of myGroup.controls['myCategory'].controls; let i = index">
<input type="checkbox" [formControl]="category">
<label>{{ categories[i].name }}</label>
</div>
Selected: <strong>{{ myGroup.get('myCategory').value }}</strong>
</form>
推荐阅读
- html - 为什么我的网格侧边栏不会在我的主要区域旁边显示内容?
- r - R中的预测h2o.automl模型
- typo3 - 检查流体中的 TYPO3 链接类型
- php - 计算 JSON 有效负载的字节大小,包括它在 PHP 中的 JSON 有效负载中
- java - 国家/地区排序列表
- sylius - 我在哪里可以获得 Sylius 的自定义模板?
- python - 将委托分配给 TreeView 单元
- python - 如果安装了 pytest-xdist,如何通过 pytest -nauto 启用并行性?
- javascript - 如何在 cognitoUser.confirmRegistration 后自动登录用户
- mysql - Mysql - 将英国国家网格 (OSGB36) 中的点几何转换为纬度/经度 (wgs84)