带有FormControl的角度垫选择触发器

时间:2019-09-01 15:36:45

标签: angular

带有材质选择触发器的角度材质选择下拉列表。

尝试创建如下所示的选择下拉列表:

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,并且代码停止工作

1 个答案:

答案 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"

Demo