Angular 默认情况下,使用FormControl选择所有/多个mat Select对象

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:

我理解,要将mat select默认为某些值,需要创建一个数组并将FormControl的值设置为该数组。但是,我很难将其用于更复杂的对象,例如:

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>