Angular 18,mat-select 绑定不适用于 formControlName 属性

问题描述 投票:0回答:1

Angular 自定义控制组件有以下代码

@Component({
  selector: 'material-custom-control',
  templateUrl: './material-custom-control.component.html',
  styleUrls: ['./material-custom-control.component.scss'],
  providers: [
    { provide: MatFormFieldControl, useExisting: RapportUiMaterialSelectComponent },
    { provide: ErrorStateMatcher, useClass: CustomErrorMatcher }
  ]
})

export class MaterialCustomControlComponent implements MatFormFieldControl<SelectList>, OnInit, OnDestroy, ControlValueAccessor {
  @Input() options: Array<{ key: string, value: string }>;
....

有html

<ng-container [formGroup]="form">    
    <mat-select 
    formControlName="selectedValue">
        <mat-option 
        *ngFor="let option of options" 
        [class.no-content]="!option.value"
        [value]="option.key">{{option.value}}</mat-option>
    </mat-select>
</ng-container>

在其他控件(如以下控件)中使用此自定义控件

  <material-custom-control formControlName="myName" [options]="myOptions">
  </material-custom-control>
  
    myOptions = [
    { key: '', value: '' },
    { key: 'Option1', value: 'Option1' },
    { key: 'Option2', value: 'Option2' },
    { key: 'Option3', value: 'Option3' },
  ];

在 UI 上,选择组件渲染时没有错误,但没有任何选项。 该代码在 Angular 11 中可以正常工作,但将应用程序更新到 Angular 18 后就无法正常工作。

如果我们删除属性 formControlName="selectedValue" 那么选项就会加载到 UI 上。

请提出可能是什么问题。

angular typescript angular-material
1个回答
0
投票

您在同一元素的两个地方使用了

formControlName
。使用输入参数作为将值传递给
options
的方式。

应该是这样的

<material-custom-control [formctrlName]="myName" [options]="myOptions">
  </material-custom-control>

formctrlName
创建输入参数并在
mat-select

中使用它
© www.soinside.com 2019 - 2024. All rights reserved.