代码之家  ›  专栏  ›  技术社区  ›  Maverik Minett

角度-对象作为选择选项值

  •  0
  • Maverik Minett  · 技术社区  · 8 年前

    我有一个带有各种选择框的表单,其中使用对象作为值:

    <mat-option [value]="object">

    这在我通过表单创建新记录时非常有用。现在当我编辑记录的时候,我遇到了一个问题 object mat-select-option

    是否可以告诉选择框小部件匹配 object.id

    详细说明我有 foo.component.ts

    let item = {
        'fruit': { id: 1, 'label': 'Pineapple' },
    }
    
    let options = [
        { 'id':1, 'label': 'Pineapple' },
        { 'id':2, 'label': 'Banana' },
        { 'id':3, 'label': 'Papaya' }
    ]
    

    还有我的 .html 文件:

    <mat-select  placeholder="Fruit" [(ngModel)]="item.fruit">
      <mat-option *ngFor="let option of options" [value]="option">{{option.label}}</mat-option>
    </mat-select>
    

    mat-select . 因为里面的“菠萝” item.fruit options 数组没有指向同一个“菠萝”对象- 是空的。

    我想看看这样的东西:

    <mat-select          
        placeholder="Fruit" 
        [(ngModel)]="item.fruit" 
        equalityAttr="id"
    >
    
    1 回复  |  直到 8 年前
        1
  •  11
  •   Maverik Minett    8 年前

    它是 [compareWith] 指令。Angular.io现在不在,所以我会用墨水 medium article

    HTML格式

    <mat-select  
        placeholder="Fruit" 
        [(ngModel)]="item.fruit"
        [compareWith]="objectComparisonFunction">
    
       <mat-option *ngFor="let option of options" [value]="option">{{option.label}}</mat-option>
    </mat-select>
    

    类型脚本

      public objectComparisonFunction = function( option, value ) : boolean {
        return option.id === value.id;
      }