You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular12调用GET接口后ngFor渲染表格无数据如何解决

问题原因

ngFor仅支持遍历数组类型数据,你当前的接口返回的是外层包裹了success/message/data的对象,直接将整个返回对象传给ngFor会触发类型不匹配报错,实际需要遍历的数组存储在返回对象的data字段中。

修复方案(推荐,服务层统一处理)

1. 修改get-service.service.ts

导入rxjs的map操作符,在服务请求后直接提取data字段返回:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators'; // 新增导入

@Injectable({
  providedIn: 'root'
})
export class GetServiceService {

  constructor(
    private http: HttpClient
  ) { }

  getCampaign(){
    // 新增pipe(map)提取data字段
    return this.http.get('https://emaillead.aturtoko.id/api/v1/campaign').pipe(
      map((res: any) => res.data)
    );
  }
}

2. 可选优化:给组件变量加类型声明(增强类型安全)

修改campaign.component.ts:

import { Component, OnInit } from '@angular/core';
import { GetServiceService } from '../get-service.service';
import { Observable } from 'rxjs'; // 新增导入

@Component({
  selector: 'app-campaign',
  templateUrl: './campaign.component.html',
  styleUrls: ['./campaign.component.css']
})
export class CampaignComponent implements OnInit {
  // 明确声明变量为数组类型的Observable
  campaigns: Observable<{id: number, name: string}[]>;
  constructor(
    private campaignService: GetServiceService,
  ) { }

  ngOnInit(): void {
    this.campaigns = this.campaignService.getCampaign();
  }
}

原有模板代码无需修改即可正常渲染表格数据。

轻量修复方案(仅改模板,无需修改逻辑代码)

如果不想调整服务和组件代码,直接修改模板里的*ngFor遍历逻辑,取返回对象的data字段即可:

<tr *ngFor="let campaign of (campaigns | async)?.data">

用可选链?.避免接口请求完成前空值报错。

内容的提问来源于stack exchange,提问作者Dragonarc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:57:03