【问题标题】:Ionic2 pull to refresh functionIonic2 拉动刷新功能
【发布时间】:2018-01-15 11:21:48
【问题描述】:

news.html

刷新功能

  <ion-refresher (ionRefresh)="doRefresh($event)">
    <ion-refresher-content pullingText="pull to refresh">

    </ion-refresher-content>
  </ion-refresher>

从服务器获取新闻列表

<ion-list *ngSwitchCase="'news'">
      <ion-card>
          <ion-item-group (click)="goToNewsDetail(new)" text-wrap *ngFor="let new of news">

            <ion-thumbnail *ngIf="new.Preview_image1" item-start>
              <img src="{{new.Preview_image1}}">
            </ion-thumbnail>

            <ion-card-content>
              <ion-item>
                <ion-card-title>{{new.title}}</ion-card-title>
                <p>{{new.news_category}}</p>
                <h3>{{new.publish_time}}</h3>
              </ion-item>
            </ion-card-content>

          </ion-item-group>
      </ion-card>
    </ion-list>

news.ts

  doRefresh(refresher){

    console.log('Begin async operation', refresher);

    setTimeout(() => {
      console.log('Async operation has ended');
      refresher.complete();
    }, 1500);

  }

获取新闻数据

  constructor(public navCtrl: NavController, 
    public navParams: NavParams,
    public newsData:NewsDataProvider){
    this.getNews();
  }
  getNews() {
      this.newsData.getNews().then(data => {
        this.news = data;
      });
  }

我想刷新新闻列表并从服务器获取新的新闻列表。我从 ionic2 doc 获得的这段代码,但它对我不起作用

编辑: 这是我在 news.ts 中添加的,没有显示错误,但刷新后没有新闻列表出来。

  doRefresh(refresher){

    this.getNews().then(() => {
      refresher.complete();
    });

  }

  getNews(): Promise<any> {
      return this.newsData.getNews().then(data => {
        this.news = data;
      });
  }

【问题讨论】:

    标签: angular typescript ionic2 rxjs ionic3


    【解决方案1】:

    您是否已经尝试在 doRefresh? 内调用 getNews 方法

      constructor(public navCtrl: NavController, 
                  public navParams: NavParams,
                  public newsData: NewsDataProvider){
        this.getNews();
      }
    
      getNews(): Promise<any> {
          return this.newsData.getNews().then(data => {
            this.news = data;
          });
      }
    
      doRefresh(refresher) {
        this.getNews().then(() => {
          refresher.complete();
        });
      }
    

    编辑

    调试代码后,我们发现服务在本地保存了一份数据:

    getNews() {
        if (this.data) {
          return Promise.resolve(this.data);
        }
        return new Promise(resolve => {
          this.http.get('servertrj.com/api/news/index/…').map(res => res.json().data).subscribe(data => {
            this.data = data;
            resolve(this.data);
          });
        });
      }
    

    这就是为什么当拉动刷新尝试获取新数据时,服务返回了相同的项目列表。用以下方法替换该方法应该可以:

      getNews() {
        return new Promise(resolve => {
          this.http.get('servertrj.com/api/news/index/…').map(res => res.json().data).subscribe(data => {
            this.data = data;
            resolve(this.data);
          });
        });
      }
    

    或者,您可以使用 RxJS 中的 toPromise 运算符,而不是创建这样的新承诺:

      getNews(): Promise<any> {
        return this.http.get('servertrj.com/api/news/index/…')
                        .map(res => res.json().data)
                        .toPromise();
      }
    

    【讨论】:

    • 我编辑了问题中的信息,请检查。谢谢!
    • 我有必要在问题中上传整个编码吗?
    • 您能否在this.news = data; 之前放置一个debugger,以检查data 属性有什么?
    • 等一下,我会把整个代码上传到这里。因为我认为这不是“数据”问题,getNews 函数可以为我显示新闻列表,但无法刷新
    • 非常感谢..完美解决我的问题...问题出在提供商那里。
    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 2013-05-07
    • 2012-06-07
    • 2015-05-14
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多