Angular 默认情况下,使用FormControl选择所有/多个mat Select对象
我理解,要将mat select默认为某些值,需要创建一个数组并将FormControl的值设置为该数组。但是,我很难将其用于更复杂的对象,例如:Angular 默认情况下,使用FormControl选择所有/多个mat Select对象,angular,angular-material,Angular,Angular Material,我理解,要将mat select默认为某些值,需要创建一个数组并将FormControl的值设置为该数组。但是,我很难将其用于更复杂的对象,例如: public formGroupCarForm: FormGroup; public formBuilder: FormBuilder; allCars: Car[] [ { id: 1, name: "Honda Accord", year: "1995" }, { id: 2, name:
public formGroupCarForm: FormGroup;
public formBuilder: FormBuilder;
allCars: Car[] [
{ id: 1, name: "Honda Accord", year: "1995" },
{ id: 2, name: "Toyota Camry", year: "1999" },
{ id: 3, name: "Audi A6", year: "2011" }
];
constructor() {
this.setDropdowns();
}
public setDropdowns() {
allCarsFilter: Car[] = this.allCars;
allCarsFilter = [...allCarsFilter, { id: 0, name: "All", year: "0000" }];
this.formGroupCarForm = this.formBuilder.group({
carFilter: new FormControl(allCarsFilter); // This doesn't work
});
}
我还有以下HTML,它有一个硬编码的“All”选项:
全部的
{{car.name+'-'+car.year}
我想选择所有的值,包括默认的“all”选项。我真的希望
carFilter:newformcontrol(allCars)代码>行将至少选择ngFor mat选项,但未选择它们。虽然我有其他下拉列表,但这些下拉列表是基于更原始的数据类型,如数字和字符串。对于这样一个对象,我该怎么做呢?我觉得很傻……我明白了为什么它不起作用。我必须修改HTML,使值实际上是Car
对象,而不是属性。我还必须为All filter选项创建一个单独的Car
对象,而不是在setDropdowns()
方法中动态实例化它。我在代码中称之为allCarsOption
,并在HTML中执行以下操作:
<form [formGroup]="formGroupCarForm">
<mat-form-field class="filter-field" appearance="outline">
<mat-select multiple floatLabel="always" formControlName="carFilter">
<mat-option (click)="toggleAllSelection()" #toggleCar [value]="allCarsOption">All</mat-option>
<mat-option *ngFor="let car of allCars" [value]="car">{{ car.name + ' - ' + car.year }}</mat-option>
</mat-select>
</mat-form-field>
</form>
全部的
{{car.name+'-'+car.year}
<form [formGroup]="formGroupCarForm">
<mat-form-field class="filter-field" appearance="outline">
<mat-select multiple floatLabel="always" formControlName="carFilter">
<mat-option (click)="toggleAllSelection()" #toggleCar [value]="allCarsOption">All</mat-option>
<mat-option *ngFor="let car of allCars" [value]="car">{{ car.name + ' - ' + car.year }}</mat-option>
</mat-select>
</mat-form-field>
</form>