【问题标题】:Angular 2 *ngFor doesn't display dataAngular 2 *ngFor 不显示数据
【发布时间】:2017-08-07 15:11:10
【问题描述】:

我正在开发一个使用 Ionic 2 和 Angular 2 的应用程序。现在我正在尝试从 API 获取数据并将其显示在页面上。

我可以记录数据,我认为它是正确的,但由于某种原因,页面本身没有显示任何内容:

我从中接收数据的 API 位于此处:http://peerligthart.com/grotekerk/v1/api.php/zerken?transform=1

*ngFor 在我看来

<ion-content padding>
  <h1 *ngFor="let z of zerken">
    {{ z.naam }}
  </h1>
</ion-content>

控制器

import { Component } from '@angular/core';

import { NavController, PopoverController } from 'ionic-angular';
import { PopoverPage } from '../popover/popover';

import { ZerkenProvider } from '../../providers/zerken';

@Component({
  selector: 'page-lijst',
  templateUrl: 'lijst.html',
  providers: [ZerkenProvider]
})

export class LijstPage {

  zerken: Array<any>;

  constructor(public navCtrl: NavController, public popoverCtrl: PopoverController, public zerkenProvider: ZerkenProvider) {
    this.zerkenProvider.getZerken().subscribe(
      data => {
        console.log(data.zerken);
        this.zerken = data.zerken.results;
      }
    )
  }

  openPopover(event) {
    let popover = this.popoverCtrl.create(PopoverPage);
    popover.present({
      ev: event
    });
  }

}

最后,提供者

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class ZerkenProvider {

  static get parameters() {
    return [[Http]];
  }

  constructor(public http: Http) {

  }

  getZerken() {
    var url = "http://peerligthart.com/grotekerk/v1/api.php/zerken?transform=1";
    var response = this.http.get(url).map(res => res.json());
    
    return response;
  }

}

那么,页面本身显示的是什么:

如你所见.. 什么都没有。我希望有人有一个解决方案,亲切的问候!

-------------编辑-------------

我将this.zerken = data.zerken.results 更改为this.zerken。这样做后它给了我一个错误:

【问题讨论】:

  • 如果检查 DOM 会怎样? HTML列表真的生成了吗?它可以简单地隐藏在 CSS 或其他东西中。
  • 试试这个&lt;h1 *ngFor="let z of zerken | async"&gt;
  • @GangadharJannu async 将是 zerken 本身是一个承诺或可观察的
  • 您在日志中没有收到任何错误..?
  • 使用 this.zerken=data.zerken

标签: javascript angularjs angular ionic-framework ionic2


【解决方案1】:

您在回复中的zerken 似乎没有results 对象,所以

this.zerken = data.zerken.results;

应该是:

this.zerken = data.zerken;

记得在你的组件中初始化数组:

zerken: Array<any> = [];

这样您就不会收到 zerken 未定义的错误,因为视图通常是在接收到数据之前呈现的。初始化它可以防止这种情况发生。

【讨论】:

  • 赞成正确答案,但这里不需要z?。 zerken 未定义或填充了数组
  • 但如果zerken 最初为空,ngFor 不应该给出错误吗?
  • gyazo.com/5f71ee5af1ea42eee4b52659f28f8c7a 在我更改数据集时收到此错误..(它填充了一个数组,是的,因为 zerken 是一个数组)
  • @Peurr,您的模板中似乎有异步管道,删除它,它应该可以工作:)
  • @Peurr 并将数组初始化为zerken: Array&lt;any&gt; = [];
【解决方案2】:

您需要一个封装*ngFor 的*ngIf,因为zerken 是稍后获得的。

试试:

<ion-content padding>
 <div *ngIf="zerken">
  <h1 *ngFor="let z of zerken">
    {{ z.naam }}
  </h1>
</div>
</ion-content>

您还需要设置zerken = data.zerken;,如@AJT_82 的另一个答案中所述。

【讨论】:

  • 只是好奇,这里 *ngIf 的意义是什么?
  • 它类似于您的安全导航..zerken 在收到订阅值之前为空..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2016-10-10
  • 2018-05-16
  • 2019-09-18
  • 2017-01-06
  • 2019-09-14
相关资源
最近更新 更多