2017-03-07 145 views
2

有沒有一種方法來重新加載按鈕點擊頁面?重新加載頁面上的按鈕點擊

<button ion-button (click)="reload()"></button> 
<ion-row *ngFor="let file of MyAudioFiles let i = index ">{{file.name}}</ion-row> 

MyAudioFiles: any[] = []; 

reload(){ 
    // what should I write to reload the current page on button click in ionic2 
} 

    ListAudioFiles() { 
     console.log("list obj", obj); 
     File.listDir(cordova.file.externalRootDirectory, 'Vanan/Audios').then(
      (allFiles) => { 
       // do something 

       console.log("we have audio files", allFiles); 
       console.log("we have audio files", allFiles.length); 
       for (var i = 0; i < allFiles.length; i++) { 
        this.MyAudioFiles.push({ 
         audio: allFiles[i], 
         status: false, 

        }); 
        console.log(this.MyAudioFiles); 
       } 

考慮我有一個列表,並刪除該列表中的1個項目。刪除成功執行,但在UI中,項目數量不會減少。如果我移回頁面並再次返回列表頁面,則可以看到列表中的更改。

+3

也許嘗試'window.location.reload()'? – Edric

+0

重新加載數據?你可以簡單地調用你在'ngOnInit'或'ionViewDidLoad'中調用的任何函數。 –

+0

你是如何第一次加載列表?你可以把這些代碼? –

回答

1

您可以通過Observables獲取數據asnycron。這樣您就不需要刷新應用程序,只需將新值放入observable-stream中即可自動更改。在計數器上放置一個很好的變化效果樣式,以便用戶可以看到計數器已更改。

+0

正確的答案在這裏。 – misha130

+0

可以給一些樣本 –

0

由於您只是想更新您的數組MyAudioFiles,因此不需要刷新整個組件,只需在刪除後更新列表即可。

爲此,進行一些更改,擺脫聲明您的數組爲any。創建一個界面,您可以將響應轉換爲並使用map而不是迭代響應。

所以接口可能是:

export interface AudioFile { 
    audio: string; 
    status: boolean; 
} 

你在哪裏獲取這些數據,使用地圖:

listDir(...) { 
    ..... 
    .toPromise() 
    .then(res => res.json().map((x: any) => <AudioFile>{audio: x, status: false}) 
} 

,然後在你的組件,申報MyAudioFilesAudioFile[]

MyAudioFiles: AudioFile[] = []; 

和您檢索AudioFiles的方法:

ListAudioFiles() { 
    File.listDir(cordova.file.externalRootDirectory, 'Vanan/Audios') 
    .then(data => { 
     this.MyAudioFiles = data; 
    }); 
} 

現在,當你刪除的東西,你只是再次呼籲ListAudioFiles,該更新列表,所以這樣的事情:

delete() { 
    File.delete(....) 
    .then(res => { 
     console.log(res); 
     this.ListAudioFiles(); // add this! 
    }); 
} 

希望這有助於! :)