【发布时间】:2020-10-13 13:18:31
【问题描述】:
我正在尝试获取选中复选框的值。我有以下代码:
<div style="background-color:lightblue;" >
<div class="content">
<label class="label">Province</label>
<div class="form-check form-check-inline" *ngFor = "let province of utilities.Provinces; let i of index">
<label class="form-check-label" for="inlineCheckbox1" >{{province}}</label>
<input class="form-check-input" [formControl]= "province" (change)="getSelectedProvinces()" type="checkbox" id="inlineCheckbox{{i}}" value="option1">
</div>
</div>
在 .ts 中我有以下内容
import { Component, OnInit } from '@angular/core';
import { UtilitiesService } from '../_services/utilities.service';
import { Utilities } from '../models/utilities';
import { forEach } from '@angular/router/src/utils/collection';
@Component({
selector: 'app-filtering',
templateUrl: './filtering.component.html',
styleUrls: ['./filtering.component.css']
})
export class FilteringComponent implements OnInit {
utilities: Utilities;
provinces: string[] = [];
selectedProvinces: string[] = [];
selectedCategories: string[] = [];
constructor(private utilityService: UtilitiesService) { }
ngOnInit() {
this.loadUtilities();
}
loadUtilities() {
this.utilityService.getJSON().subscribe((utilities: Utilities) => {
this.utilities = utilities;
});
for (const province of this.utilities.Provinces) {
this.provinces.push(province);
}
}
getSelectedProvinces() {
this.selectedProvinces = [];
this.utilities.Provinces.forEach((_province, i) => {
if (_province.value) {
this.selectedProvinces.push(this.provinces[i]);
}
});
console.log(this.selectedProvinces);
}
}
在我的utilities.ts 我有以下内容:
export interface Utilities {
Provinces: Array<string>;
}
我的服务是这样写的:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Utilities } from '../models/utilities';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class UtilitiesService {
constructor(private http: HttpClient) {}
public getJSON(): Observable<Utilities> {
return this.http.get<Utilities>('./assets/utilities.json');
}
}
Json 的内容如下:
{
"Provinces":["East","North West","North"]
}
当我尝试这样做时,出现以下错误:
TypeError: Cannot read property 'Provinces' of undefined.
问题是,当我删除[formControl]= "province" (change)="getSelectedProvinces()" 时,至少我可以在我的页面上显示省份。
我该怎么办?
【问题讨论】:
-
我认为你应该将你的 api 响应映射到 Observable
而不是 Utilities 并使用它。在实用程序的情况下,命名也具有误导性。通常以复数形式命名的任何东西都应该指一个集合,而不是单个对象 -
@ihorbond,问题是我可能需要向该 JSON 添加更多属性
-
嘿,我用 cdk selectionmodel 解决了这个问题:stackblitz; material docs
标签: html angular typescript checkbox