将数据从 api 插入到材料选择输入角度

Posted

技术标签:

【中文标题】将数据从 api 插入到材料选择输入角度【英文标题】:insert data from api to material select input angular 【发布时间】:2021-09-27 18:53:02 【问题描述】:

我有一个 API 可以返回一些数据,我尝试将这些数据推送到 mat select 输入中,但 select 中的数据不显示,我如何使用这个 api 来做到这一点,我只是尝试使用 for 进行循环,但它也不工作

 TestArrList:any[]=[];
 data1!:any[];
 
 
  ngOnInit(): void 

    let uri = 'APIURL';
    this.http.get(uri).subscribe((data:any) =>   
      this.TestArrList = data
   
for(var i = 0;i < this.TestArrList.length;i++)
       
   for(var j = 0;j < this.TestArrList[i].Items.length;j++)
      this.data1.push(this.TestArrList[i].Items[j].Name);
    console.log(this.TestArrList);
   return this.data1
      

     ); 
     
 
 
<mat-grid-tile [colspan]="fieldColspan">
              <mat-form-field class="form-field" appearance="outline" style="width:20vw">
                <mat-label>Location </mat-label>
                <mat-select placeholder ="Select test"  [formControl]="testControl">
                  <mat-option *ngFor="let item of TestArrList"  [value]="item.name">
                    item.value
                  </mat-option>
                </mat-select>
              </mat-form-field>
            </mat-grid-tile>

我的结果 api,我尝试从每个项目中获取“值”(测试值 1,测试值 2,测试值 3)

[
    
        "Items": [
            
                "Name": "Id",
                "Value": "1"
            ,
            
                "Name": "test",
                "Value": "value1 for test"
            
        ],
        "Value": null
    ,
    
        "Items": [
            

                "Name": "Id",
                "Value": "2"
            ,      
            

                "Name": "test",
                "Value": "value2 for test"
            
        ],
        "Value": null
    ,
    
        "Items": [
            
                "Name": "Id",
                "Value": "3"
            ,
       
            
                "Name": "test",
                "Value": "value3 for test"
            
        ],
        "Value": null
    
]

【问题讨论】:

【参考方案1】:

您将data 分配给TestArrList,但data 的格式不正确。相反,您可以使用reduce

TestArrList: any[] = [];
data1!: any[];


ngOnInit(): void 

    let uri = 'APIURL';
    this.http.get(uri).subscribe((data: any) => 
        this.TestArrList = data.reduce((acc, curr) => 
          acc.push(...curr.Items) // destructuring array
          return acc;
        , []);

      
    
<mat-grid-tile [colspan]="fieldColspan">
  <mat-form-field class="form-field" appearance="outline" style="width:20vw">
    <mat-label>Location </mat-label>
    <mat-select placeholder="Select test" [formControl]="testControl">
      <mat-option *ngFor="let item of TestArrList" [value]="item.name">
        item.value
      </mat-option>
    </mat-select>
  </mat-form-field>
</mat-grid-tile>

【讨论】:

什么是 acc 和 curr? acccurr 是函数参数。 acc 是累加器,它将收集新值,curr 是迭代中的当前对象 它也不会在输入中显示 item.value 对不起,我的错,它可以工作,但它会在输入中显示带有 id 的值,我只需要 value1 进行测试,value2 进行测试,value3 进行测试

以上是关于将数据从 api 插入到材料选择输入角度的主要内容,如果未能解决你的问题,请参考以下文章

如何避免使用角度材料从角度 2 中的 mat-table 传输相同的行

如何将角度材料表与后端数据动态绑定?

如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组

角度材料自动完成 - 如何防止键盘输入以在建议面板中选择一个选项

将图标添加到角度材料输入

角度材料日期选择器中的日期不正确