第一次不加载数据

时间:2019-07-24 03:30:07

标签: php angular ionic-framework

我正在开发带有角度的Ionic应用程序。它有一个带有php的API。因此,我有一个返回JSON的服务,事实是,第一次加载页面时,它不会加载JSON中的数据。

服务:

import { Injectable } from '@angular/core';
import { HttpClient, HttpClientModule } from '@angular/common/http';

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

posts;

baseURL: String;

constructor(public http: HttpClient) {
    this.baseURL = 'http://127.0.0.1:8000/'
}

getPlayers() {    
this.http.get(this.baseURL + 'GetPlayers')
  .subscribe(data => {
    this.posts = data;
  });
return this.posts;
}

我如何加载它:

@Component({
  selector: 'app-players',
  templateUrl: './players.page.html',
  styleUrls: ['./players.page.scss'],
})
export class PlayersPage implements OnInit {

constructor(private playerService: PlayerService) { }

players = this.playerService.getPlayers();

ngOnInit() {
 }
}

HTML:

<ion-header>
  <ion-toolbar>
    <ion-buttons slot="start">
      <ion-menu-button></ion-menu-button>
    </ion-buttons>
    <ion-title>Players</ion-title>
  </ion-toolbar>
</ion-header>
<ion-content>
 <ion-list>
    <ion-item *ngFor="let p of players">
      <ion-label>
        <h2>{{p.name}}</h2>
        <h3>{{p.mail}}</h3>
      </ion-label>
    </ion-item>
  </ion-list>
</ion-content>

1 个答案:

答案 0 :(得分:2)

您应该在组件而不是服务上返回可观察的对象。这样可以确保在组件初始化时加载数据。

@Component({
  selector: 'app-players',
  templateUrl: './players.page.html',
  styleUrls: ['./players.page.scss'],
})
export class PlayersPage implements OnInit {

  constructor(private playerService: PlayerService) { }

  ngOnInit() {
    this.playerService.getPlayers().subscribe(data => {
      this.players = data;
    });
  }
}

然后在您的service.ts上进行以下更改。

getPlayers() {    
  return this.http.get(this.baseURL + 'GetPlayers');
}

请尝试了解服务和组件的目的。如Angular documentation所述,

  

理想情况下,组件的工作是使用户体验和   而已。组件应提供以下属性和方法:   数据绑定,以便在视图之间进行中介(由   模板)和应用程序逻辑(通常包括一些概念)   的模型)。

另一方面,应将获取和保存数据(执行HTTP请求)的职责委托给服务。