首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示的Angular12获取API生成表数据

未显示的Angular12获取API生成表数据
EN

Stack Overflow用户
提问于 2021-09-29 05:08:06
回答 1查看 77关注 0票数 0

因此,我试图为API中的每个数据创建一个使用ngFor的表。我试过Youtube视频中的一个教程,它运行得很好。现在我尝试使用提供给我的API,但问题是数据没有在表中显示

代码语言:javascript
复制
<!-- Main content -->
<section class="content">
  <div class="container-fluid">
    <div class="row">
      <div class="col-md-12">
        <!-- TABLE: LATEST ORDERS -->
        <div class="card">
          <div class="card-header border-transparent">
            <h3 class="card-title">Latest Orders</h3>

            <div class="card-tools">
              <button type="button" class="btn btn-tool" data-card-widget="collapse">
                <i class="fas fa-minus"></i>
              </button>
              <button type="button" class="btn btn-tool" data-card-widget="remove">
                <i class="fas fa-times"></i>
              </button>
            </div>
          </div>
          <!-- /.card-header -->
          <div class="card-body p-0">
            <div class="table-responsive">
              <table class="table m-0">
                <thead>
                <tr>
                  <th>Order ID</th>
                  <th>Item</th>
                  <th>Status</th>
                  <th>Popularity</th>
                </tr>
                </thead>
                <tbody>
                <tr>
                  <td><a href="pages/examples/invoice.html">OR9842</a></td>
                  <td>Call of Duty IV</td>
                  <td><span class="badge badge-success">Shipped</span></td>
                  <td>
                    <div class="sparkbar" data-color="#00a65a" data-height="20">90,80,90,-70,61,-83,63</div>
                  </td>
                </tr>
                <tr *ngFor="let campaign of campaigns | async">
                  <td><a href="pages/examples/invoice.html">{{campaign.id}}</a></td>
                  <td>{{campaign.name}}</td>
                  <td><span class="badge badge-warning">Pending</span></td>
                  <td>
                    <div class="sparkbar" data-color="#f39c12" data-height="20">90,80,-90,70,61,-83,68</div>
                  </td>
                </tr>
                
                </tbody>
              </table>
            </div>
            <!-- /.table-responsive -->
          </div>
          <!-- /.card-body -->
          <div class="card-footer clearfix">

          </div>
          <!-- /.card-footer -->
        </div>
        <!-- /.card -->
      </div>
      <!-- /.col -->
    </div> <!-- /.row -->

campaign.component.ts

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { GetServiceService } from '../get-service.service';

@Component({
  selector: 'app-campaign',
  templateUrl: './campaign.component.html',
  styleUrls: ['./campaign.component.css']
})
export class CampaignComponent implements OnInit {
  campaigns;
  constructor(
    private campaignService: GetServiceService,
  ) { }

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

}

get-service.service.ts

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

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

  constructor(
    private http: HttpClient
  ) { }

  getCampaign(){
    return this.http.get('https://emaillead.aturtoko.id/api/v1/campaign')
  }
}

因此,我的期望是,这段代码会给出API中的数据列表(忽略第一个)。实际发生的情况是,表只显示第一个,这意味着数据没有显示在表上。

控制台中的错误是

代码语言:javascript
复制
ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
    at NgForOf.ngDoCheck (common.js:3184)
    at callHook (core.js:2536)
    at callHooks (core.js:2495)
    at executeCheckHooks (core.js:2427)
    at refreshView (core.js:9474)
    at refreshComponent (core.js:10636)
    at refreshChildComponents (core.js:9261)
    at refreshView (core.js:9515)
    at refreshEmbeddedViews (core.js:10590)
    at refreshView (core.js:9489)

api中的postman数据是

代码语言:javascript
复制
{
    "success": true,
    "message": "success",
    "data": [
        {
            "id": 1,
            "name": "buattoko"
        },
        {
            "id": 2,
            "name": "omnipos"
        },
        {
            "id": 3,
            "name": "pluscampaign"
        }
    ]
}

我需要做些什么才能把数据拿到桌子上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-29 05:17:40

添加pipemap rxjs操作符,将结果转换为response.data

get-service.service.ts

代码语言:javascript
复制
import { map } from 'rxjs/operators';

getCampaign() {
  return this.http.get('https://emaillead.aturtoko.id/api/v1/campaign')
    .pipe(map((response: any) => response.data));
}

基于StackBlitz的样本解决方案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69370690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档