2016-12-19 23 views
1

我試圖在函數再次調用服務刷新頁面,但我沒有做......這裏是代碼:離子複習不刷新頁面內容

export class JobsPage { 
    jobs: Jobs[] 

    constructor(public navCtrl: NavController, private jobsData: JobsData) { 

     jobsData.load().then(res => { 
     this.jobs = res; 
     }) 
     } 

    doRefresh(refresh){ 

     setTimeout(() => { 
     this.jobsData.load().then(res => { 
     this.jobs = res; 
     }); 
     refresh.complete(); 
     }, 1000); 
    } 

由於你會發現我在刷新功能中再次運行service.jobsData.load(),但是新數據不會更新......除非我完全刷新網頁以便加載新數據

html我已經放置了正確的複習下<ion-content>

<ion-content> 
    <ion-refresher (ionRefresh)="doRefresh($event)"> 
    <ion-refresher-content 
     pullingIcon="arrow-dropdown" 
     pullingText="Pull to refresh" 
     refreshingSpinner="circles" 
     refreshingText="Refreshing..."> 
    </ion-refresher-content> 
    </ion-refresher> 

    <ion-card *ngFor="let job of jobs"> 
    //// the page content 
    </ion-card> 
    </ion-content> 

我包括service.ts代碼以及:

load() { 
    if (this.data) { 
     return Promise.resolve(this.data); 
    } 
    return new Promise(resolve => { 
     this.http.get(this.jobsApiUrl) 
     .map(res => res.json()) 
     .subscribe(data => { 
     this.data = data.data; 
     resolve(this.data); 
     }); 
    }); 
    } 

.subscribe是用於訪問數據的API { data: {.....}, category: {.....} } 我不能找到一種方法,這與Observable

回答

1

儘量完成刷新行動異步操作完成後。 然後把完整的函數調用。

doRefresh(refresh){ 

     setTimeout(() => { 
     this.jobsData.load().then(res => { 
     this.jobs = res; 
     refresh.complete();//here 
     }); 
     }, 1000); 
    } 

編輯此外, 設置的離子複習內容中的工作離子卡列表。

<ion-content> 
     <ion-refresher (ionRefresh)="doRefresh($event)"> 
     <ion-refresher-content 
      pullingIcon="arrow-dropdown" 
      pullingText="Pull to refresh" 
      refreshingSpinner="circles" 
      refreshingText="Refreshing..."> 
//here 
     <ion-card *ngFor="let job of jobs"> 
     //// the page content 
     </ion-card> 
     </ion-refresher-content> 
     </ion-refresher> 


     </ion-content> 

您的服務方法返回相同的數據,因爲你已經在服務它保存每次class.Either加載..

load() { 
    return new Promise(resolve => { 
     this.http.get(this.jobsApiUrl) 
     .map(res => res.json()) 
     .subscribe(data => { 
     this.data = data.data; 
     resolve(this.data); 
     }); 
    }); 
    } 

或者刪除數據對象在你的服務,並調用它的方法在你的刷新方法加載之前。

+0

你使用超時的任何原因? –

+0

它沒有工作......即時使用超時根據documetation ..它設置持續時間爲'' – Yasir

+0

如果任何內離子複習內容....我得到一個空白頁只有刷新工作時拉下 – Yasir

0

我認爲HTTP服務的執行需要一定的時間,

所以你refresh.complete()從服務器獲取resposne之前執行。

嘗試這樣做:

export class JobsPage implements onInit { 

    jobs: Jobs[] 

    constructor(public navCtrl: NavController, private jobsData: JobsData) { 
    this.loadData(); 
    } 

    loadData() { 
    jobsData.load().then(res => { 
    this.jobs = res; 
    }); 
    } 

    doRefresh(refresh){ 
    jobsData.load().then(res => { 
     // To check response data format 
     console.log("data from server", res); 
     this.jobs = res; 
     refresh.complete(); 
    }); 
    } 

} 

YOUT HTML是看喜歡:

<ion-refresher (ionRefresh)="doRefresh($event)"> 
    <ion-refresher-content></ion-refresher-content> 
</ion-refresher> 

,也是我正在做這樣的事情在我的項目,它的工作對我來說, 請檢查一次,它會幫助你

complaintRefresh(refresher) { 
    // Set currnt page 
    this.currentPage = 1; 
    setTimeout(() => { 
     this.c.getComplaints(this.currentPage).subscribe((complaints) => { 
     // Handle htp response status 
     if (complaints.status === 204) { 
      this.EmptyComplaints = true; 
     } else { 
      this.EmptyComplaints = false; 
      this.complaints = complaints.json(); 
     } 
     }, (err) => { 
     this.nl.showToast("Internal Server Error.. please try again"); 
     }); 
     refresher.complete(); 
    }, 1000); 
    } 
+0

有時最好使用ngOnInit()而不是構造函數()來執行此操作一種過程 –

+0

@SurajRao @ tusharbalar我認爲你說的是​​......但OnInit只會觸發一次。相反,在離子2中,更好的生命鉤是'ionViewWillEnter()',所以我嘗試了,但是沒有用......事情是當我在'doRefresh()'函數內再次調用服務時收到的數據,它不是正在更新/重新加載,當我登錄它時,它仍然是相同的數據......它僅在第一次啓動時發生...... !! – Yasir

+0

我通過刪除'if(this.data){return Promise.resolve(this.data); }'但我有興趣知道是否有方法使用'Observables'來返回API的'data'部分 – Yasir