【问题标题】:How can I set selected attribute for my mat-option?如何为我的 mat-option 设置 selected 属性?
【发布时间】:2019-10-11 16:33:20
【问题描述】:

我的mat-selectmat-option 控件有问题。 我需要将选定属性设置为第一个mat-option 控件,而不绑定[(ngModel)][(value)]。 我的mat-option 控件是由*ngFor 指令生成的,但我的组件中不需要属性,它通常绑定在[(ngModel)] mat-select UI 控件上。 所以,我尝试了这个:

<mat-form-field>
    <mat-label>Currency</mat-label>
    <mat-select #currencySelect>
        <mat-option *ngFor="let currency of currencies; let isFirst = first" [value]="currency" [attr.selected]="isFirst ? 'selected' : null">
            {{currency | currencyName}}
        </mat-option>
    </mat-select>
</mat-form-field>

还有这个:

<mat-form-field>
    <mat-label>Currency</mat-label>
    <mat-select #currencySelect>
        <div *ngFor="let currency of currencies; let isFirst = first">
            <mat-option *ngIf="isFirst" selected [value]="currency">
                {{currency | currencyName}}
            </mat-option>
            <mat-option *ngIf="!isFirst" [value]="currency">
                    {{currency | currencyName}}
            </mat-option>
        </div>
    </mat-select>
</mat-form-field>

只有这样才能达到我想要的效果:

<mat-form-field>
    <mat-label>Currency</mat-label>
    <mat-select #currencySelect [value]="currencies != null && currencies.length != 0 ? currencies[0] : null">
        <mat-option *ngFor="let currency of currencies;" [value]="currency">
            {{currency | currencyName}}
        </mat-option>
    </mat-select>
</mat-form-field>

但在这里我不使用选定的属性。我在[value] 上使用绑定,我非常不喜欢。

我希望代码是这样的:

<mat-form-field>
    <mat-label>Currency</mat-label>
    <mat-select #currencySelect>
        <mat-option *ngFor="let currency of currencies; let isFirst = first" [value]="currency" [selected]="isFirst">
            {{currency | currencyName}}
        </mat-option>
    </mat-select>
</mat-form-field>

我该怎么做? 再一次,我不需要组件中用于标识所选项目的属性。这很重要。

【问题讨论】:

  • compareWith 属性怎么样?

标签: angular typescript angular-material material-ui


【解决方案1】:

Mat select 不能直接与对象一起使用,您可以像这样在 mat-select 上使用 compareWith 输入:

<mat-select [compareWith]="compareFn" [value]="initialValue"></mat-select>

在你的 Ts 文件中,添加这些例如:

initialValue= {currencyID: 1, currencyName: 'USD'};
compareFn(a, b) {
  return a.currencyID == b.currencyID;
}

【讨论】:

  • 因此,您仍然在组件中创建了一个属性 - initialValue。但我不需要它。
  • 你的例子与[value]="currencies != null &amp;&amp; currencies.length != 0 ? currencies[0] : null"有何不同
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
相关资源
最近更新 更多