带有材质选择触发器的角度材质选择下拉列表。
尝试创建如下所示的选择下拉列表:
https://stackblitz.com/angular/omvmgjjbnnq?file=app%2Fselect-custom-trigger-example.ts
我的代码:
component.ts
export class SelectCustomTriggerExample implements OnInit {
dispForm : FormGroup
constructor(private fb : FormBuilder) {}
ngOnInit() {
this.dispForm = this.fb.group({
toppings : ['']
})
}
toppingList: string[] = ['Extra cheese', 'Mushroom', 'Onion', 'Pepperoni', 'Sausage', 'Tomato'];
}
component.html
<mat-form-field>
<form [formGroup]="dispForm">
<mat-select placeholder="Toppings" formControlName="toppings" multiple>
<mat-select-trigger>
{{toppings.value ? toppings.value[0] : ''}}
<span *ngIf="toppings.value?.length > 1" class="example-additional-selection">
(+{{toppings.value.length - 1}} {{toppings.value?.length === 2 ? 'other' : 'others'}})
</span>
</mat-select-trigger>
<mat-option *ngFor="let topping of toppingList" [value]="topping">{{topping}}</mat-option>
</mat-select>
</form>
</mat-form-field>
我已将formControl更改为formControlName,并且代码停止工作
答案 0 :(得分:0)
您的代码定义了两个表单控件。使用> fetched_at
时,仅使用其中一个:使用[formControl]
创建的一个。
在使用toppings = new FormControl();
时,您同时使用了两者:使用formControlName
创建的一个是您选择的绑定对象,另一个是触发器使用的一个。
应该只有一个表单控件。并且所有代码都应使用表单控件来使用。
在组件中替换
toppings : ['']
通过
toppings = new FormControl();
此外,您的表单名为get toppings(): FormControl {
return this.dispForm.get('toppings') as FormControl;
}
,而不是dispForm
。并且它必须是dispform
,而不是formControlName="toppings"
。