在垫选择中未显示或未选择选项

时间:2018-09-19 09:48:45

标签: angular typescript angular-material

我想在mat-select表单的Angular字段内预先选择一些选项,因此我在typescript文件中有以下代码:

selectedApps = [];
ngOnInit() {
    const url = this.baseUrl + `/projects/${this.id}`;
    this.httpClient.get(url).subscribe((data: Array<any>) => {
        for (let i=0; i<data['results'][0]['apps'].length; i++) {
            this.selectedApps.push(data['results'][0]['apps'][i]['name']);    
        }

    });
}

这是垫选择输入字段:

          <div class="col-sm-8 float-left">

        <mat-form-field> <mat-select
          [(value)]="selectedApps" 
          placeholder="Select the associated applications ..."
          multiple (click)="getAppList();"> <mat-option
          *ngFor="let app of appsList?.results" [value]="app.id">{{app.name
        }}</mat-option> </mat-select> </mat-form-field>
      </div>

我的问题是selectedApps的值未显示在字段内,即使这些值已正确地推入数组内也是如此。为什么呢?

2 个答案:

答案 0 :(得分:0)

您正在“预选”名称

this.selectedApps.push(data['results'][0]['apps'][i]['name']);  

当您的选项包含ID时

<mat-option
          *ngFor="let app of appsList?.results" [value]="app.id">{{app.name
        }}</mat-option>

为了使其正常工作,selectedApps必须保持mat-option [value]属性上可用的相同值。毕竟,这就是实际的mat-select值。

说实话,我将整个app作为一个值,因为没有理由威胁它。它将简化许多代码。

答案 1 :(得分:0)

我在component.ts文件中添加了一些虚拟数据,并且可以在表单字段中看到selectedApps。

在模板文件中

<form>
  <div class="col-sm-8 float-left">
    <mat-form-field> <mat-select
      [(value)]="selectedApps" 
      placeholder="Select the associated applications ..."
      multiple (click)="getAppList();"> <mat-option
      *ngFor="let app of appsList" [value]="app.value">{{app.name
    }}</mat-option> </mat-select> </mat-form-field>
  </div>

并在ts文件中:

export class SelectFormExample {
selectedApps: string;
 appsList = [
 {value: 'app_1', results: 'App1-result', name: 'APP 1'},
{value: 'app_2', results: 'App2-result', name: 'APP 2'},
{value: 'app_3', results: 'App3-result', name: 'APP 3'}
];

getAppList(){
    console.log('getAppList');
  }