带有对象的角度材质多选选项

Posted

技术标签:

【中文标题】带有对象的角度材质多选选项【英文标题】:Angular Material Multiple Select Options with Object 【发布时间】:2018-04-25 00:19:41 【问题描述】:

当前设置:

角 4 角材料 Firebase (Firestore)

预期行为:

最初从我的角度材料多选中的数组中选择多个对象。

当前行为:

最初没有选择任何项目。 单击它们时会正确选择它们。 将它们保存在 Firebase(Firestore) 中工作(保存文档参考)

附加说明:

如果我只使用对象属性,它们最初会被正确选择。 classe.multiclassement 是一个引用数组 classes 是我的对象数组

代码示例:

<mat-select placeholder="Multiclassement" [(ngModel)]="classe.multiclassement" multiple>
  <mat-option *ngFor="let c of classes | async" [value]="c">c.nom</mat-option>
</mat-select>

【问题讨论】:

你可以发plunker 来复制它吗? 【参考方案1】:

由于我们正在处理对象,multiclassesment 数组中的对象没有引用 classes 数组中的对象,因此 Angular 无法进行绑定。我们可以像这样使用compareWith (docs) 来解决这个问题:

<mat-select [compareWith]="compareWithFn" placeholder="Multiclassement" 
            [(ngModel)]="classe.multiclassement" multiple>

和 TS:

compareWithFn(item1, item2) 
  return item1 && item2 ? item1.nom === item2.nom : item1 === item2;

DEMO

【讨论】:

没问题,很高兴能帮上忙! :)

以上是关于带有对象的角度材质多选选项的主要内容,如果未能解决你的问题,请参考以下文章

在角度多选选项卡中设置文本

显示多选 jquery 的所有选项

jQuery基于文本字段选择多选选项

用户界面:多选选择框

antd+vue3 多选框的值为对象数组

带有 Laravel 5.3 的 Vue 多选