无法在材质Multiselect Angular 6中设置默认值

无法在材质Multiselect Angular 6中设置默认值,angular,angular-material,multi-select,Angular,Angular Material,Multi Select,我正在尝试使用材质在角度中实现多重选择 当页面在编辑模式下打开时,某些类型应在Multiselect中选择为默认类型,但在我的情况下不起作用 以下是HTML: <mat-form-field > <mat-select placeholder="DocTypes" [(value)]="selectedDocType" formControlName="docTypes" multiple> <mat-option *ngFor="

我正在尝试使用材质在角度中实现多重选择

当页面在编辑模式下打开时,某些类型应在Multiselect中选择为默认类型,但在我的情况下不起作用

以下是HTML:

 <mat-form-field >
      <mat-select  placeholder="DocTypes" [(value)]="selectedDocType" formControlName="docTypes" multiple>
        <mat-option  *ngFor="let doc of docs" [value]="doc.name">{{doc.name}}</mat-option>
      </mat-select>
    </mat-form-field>
此处resp包含正确的文档类型。例如CV

值得注意的是,当我将selectedDocType设置为如下时,它就会工作:

this.selectedDocType = ["CV"];
但是,当我按上面提到的for each时,它不起作用。它们在数组中都有1个值

我做错了什么

更新:单据格式如下:

  selectedDocType: string[] = new Array();
 resp.forEach(x => {
                    this.selectedDocType.push(x.name);
                  });
export interface DocTypes{
  id: string;
  name: string;
}

该问题是材料选择的已知问题。 它按对象参照选择,而不是按值选择

  • 这就是为什么它只对字符串有效,而对实际对象无效
使用名为

这里有一点:

HTML:

<mat-form-field>
  <mat-select multiple [(ngModel)]="selectedObjects" [compareWith]="comparer">
    <mat-option *ngFor="let iobject of allObjects" [value]="iobject">{{iobject.name}}</mat-option>
  </mat-select>
</mat-form-field>
interface obj {
  name: string,
  value: number
}

@Component({
  selector: 'select-multiple-example'
})
export class SelectMultipleExample {

  selectedObjects : obj[];

  allObjects : obj[] = [
    {name: 'AAA', value: 1},
    {name: 'BBB', value: 2},
    {name: 'CCC', value: 3}
  ];

  ngOnInit() {
    // define default selection
    this.selectedObjects = [{name: 'AAA', value: 99}, {name: 'CCC', value: 99}];    
  }

  comparer(o1: obj, o2: obj): boolean {
    // if possible compare by object's name property - and not by reference.
    return o1 && o2 ? o1.name === o2.name : o2 === o2;
  }
}

谢谢大家帮助我

问题在于响应的赋值,因为我将响应直接赋值给变量

相反,我必须先将该值赋给一个局部变量,然后将该值赋给selectedDocType,它就起作用了:

name: [];
 for (var i = 0; i < resp.length; i++) {
                name[i] = resp[i].id;
              }
this.selectedDocType = name;
名称:[];
对于(变量i=0;i

通过这种方式,selectedDocType被分配了所需的正确值。

你能试试这个
This.selectedDocType=resp.map(x=>x,name)
,如果这个方法有效,你能提供一个plunker/codesandbox来演示这个问题吗。如果我理解正确,你想让选项成为x.name的列表吗?还是有别的问题?我试过了,但还是一样的问题。我无法创建plunker,因为数据来自后端。让我试试看,它是一个简单的id,名为@Sescudero。我已经更新了问题,我没有表格,但这有用吗?查看app.component.ts查看逻辑,app.component.html查看html让我知道,这样我就可以回答了。我只是不知道表单是否是一个重要因素,以及您是否需要resp和docs作为对象或数组感谢帮助。但就我而言,问题就不同了。我已经补充了这个问题的答案。