Angular 2 * ngFor不显示数据

时间:2017-03-16 12:29:51

标签: javascript angularjs angular ionic-framework ionic2

我正在使用Ionic 2和Angular 2处理应用程序。现在我尝试从API中获取数据并在页面上显示。

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

enter image description here

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

* ng在我看来

<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;
  }

}

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

enter image description here

正如你所看到的......没什么。我希望有人有解决方案,亲切的问候!

------------- ------------- EDIT

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

enter image description here

2 个答案:

答案 0 :(得分:6)

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

this.zerken = data.zerken.results;

应该是:

this.zerken = data.zerken;

请记住初始化组件中的数组:

zerken: Array<any> = [];

这样您就不会得到一个未定义zerken的错误,因为视图通常在收到数据之前呈现。初始化它会阻止它。

答案 1 :(得分:2)

您需要*ngIf封装*ngFor,因为zerken是在以后获得的。{/ p>

尝试:

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

您还需要按@ AJT_82的其他答案中的说明设置zerken = data.zerken;