【问题标题】:Unable to bind the dynamic data into Angular Material select form无法将动态数据绑定到 Angular 材质选择表单
【发布时间】:2019-12-17 07:55:15
【问题描述】:

我无法使用 Angular8 使用 Angular Material 选择表单动态显示数据。我的代码如下。

product.componet.html:

<form [formGroup]="productForm" (submit)="saveProduct($event)" novalidate> 

    <mat-form-field appearance="outline" class="col-lg-4 col-md-6 col-sm-12">
        <mat-label>Product Name</mat-label>
           <input matInput placeholder="Product Name" aria-label="Product Name" formControlName="Name" maxlength="70" required>
    </mat-form-field>
   <mat-form-field appearance="outline" class="col-lg-4 col-md-6 col-sm-12">
                            <mat-label>Gender</mat-label>
                            <mat-select
                                placeholder="Select Gender" 
                                aria-label="Select Gender" 
                                (selectionChange)="onGenderSelectionChanged($event)"
                            >
                                <mat-option *ngFor="let s of genders" [value]="s.Code">
                                    <span *ngIf="!s.Code">
                                    </span>
                                    <span *ngIf="s.Code">
                                        {{s.Name}}
                                    </span>
                                </mat-option>
                            </mat-select>
                        </mat-form-field>

</form>

Product.componet.ts:

genders: any = [
    '',
    {
      Code: "M",
      Name: "Male"
    },
    {
      Code: "F",
      Name: "Female"
    },
    {
      Code: "U",
      Name: "Unisex"
    }
  ];
this.productForm.setValue({
     Name : String = 'Test product',
     Gender: String = 'M(Male)'
})

我可以显示产品名称,但无法显示动态绑定的下拉值。我需要使用 Angular 8 动态显示下拉值。

【问题讨论】:

  • 这篇文章有一些问题。它们已在您之前的一百多个帖子中得到更正,这就是您有时会被否决的原因。 (1) 您的每个文件名都有拼写错误。 (2) 您的文件名在引号中,但它们不是引号。 (3) 你一直说你在“解释”你的代码,而且你已经多次被告知这不是正确的词。您正在“展示”或“提供”您的代码。我不明白为什么你不愿意听从基本的、合理的建议。

标签: angular angular-material


【解决方案1】:

发布的代码中有几处是错误的:

  1. 您必须使用formControlName 来控制&lt;mat-select&gt; 控件的性别:

例如:

                Here
            \/\/\/\/\/\/
<mat-select formControlName="Gender" placeholder="Select Gender" aria-label="Select Gender" (selectionChange)="onGenderSelectionChanged($event)">
  <mat-option *ngFor="let s of genders" [value]="s.Code">
     <span *ngIf="!s.Code"></span>
     <span *ngIf="s.Code"> {{s.Name}}</span>
  </mat-option>
</mat-select>
  1. 虽然FormGroup的设置值不需要指定数据类型,
this.productForm.setValue({
  Name : 'Test product',
  Gender: 'M'
});  

不是M(Male),这是完全不同的。来自M,用于绑定matselect的值。

Working_Demo

【讨论】:

    【解决方案2】:

    而不是检查尝试使用将值设置为“”

    <span>                                        
       {{s.Name}}                                    
    </span>
    
    

    你的数组为

    genders: any = [
        {
          Code: "",
          Name: ""
        },
        {
          Code: "M",
          Name: "Male"
        },
        {
          Code: "F",
          Name: "Female"
        },
        {
          Code: "U",
          Name: "Unisex"
        }
      ];
    

    设置mat选择值

    <mat-select placeholder="Select Gender" aria-label="Select Gender"  (selectionChange)="onGenderSelectionChanged($event)" formControlName="Gender">
     <mat-option *ngFor="let s of genders" [value]="s.Code">
         <span *ngIf="!s.Code"></span>
         <span *ngIf="s.Code">
           {{s.Name}}
         </span>
     </mat-option>
    </mat-select>
    

    将 formControlName 添加到 mat select 标记

    formControlName="Gender"
    

    【讨论】:

    • 不明白你的回答。我的要求是当用户单击编辑按钮时,两个值都将设置为相应的字段。
    • 好的,更新答案
    猜你喜欢
    • 2018-05-01
    • 2020-06-20
    • 2020-03-08
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2017-10-17
    相关资源
    最近更新 更多