2016-08-22 54 views
6

我想使用最近添加的LoadingController這樣:離子2 - 載入控制器不工作

let loading=this.load.create({ 
    content: "Connexion au serveur Migal en cours..." 
}); 

loading.present(); 

this.http.get(this.urlCheckerForm.value.migalUrl+'/action/MobileApp/URLChecker') 
    .map(res => res.json()) 
    .subscribe(
    data => this.newConnection(data,loading), 
    error => this.catchURLError(loading)); 

loading.dismiss(); 

基本上,我只是想被載入我的網頁之前顯示我的裝載卡扣式,和解僱它後。

我也跟着上Ionic 2 Documentation的例子,但它似乎並沒有在所有的工作......

編輯:裝載組件甚至沒有露面。

回答

14

與您的代碼的問題是,你正在做的http請求,然後調用dismiss()dismiss()方法不等待http請求完成。請看看this plunker

的代碼是非常不言自明:

import { NavController, LoadingController } from 'ionic-angular/index'; 
import { Http, Response } from '@angular/http'; 
import { Component } from "@angular/core"; 
import 'rxjs/Rx'; 

@Component({ 
    templateUrl:"home.html" 
}) 
export class HomePage { 

    private users : Array<any> 

    constructor(private http: Http, private loadingCtrl: LoadingController) { 

    // Create the popup 
    let loadingPopup = this.loadingCtrl.create({ 
     content: 'Loading data...' 
    }); 

    // Show the popup 
    loadingPopup.present(); 

    // Get the data 
    this.http.get('https://jsonplaceholder.typicode.com/users') 
     .map((res: Response) => res.json()) 
     .subscribe(
     data => { 

      // I've added this timeout just to show the loading popup more time 
      setTimeout(() => { 
      this.users= data; 
      loadingPopup.dismiss(); 
      }, 1000); 

      // Should be just this: 
      // this.users= data; 
      // loadingPopup.dismiss(); 
     }, 
     err => console.error(err) 
    ); 

    } 
} 
+0

它像一個魅力一樣工作! :)感謝您的解釋。我忘記了不對稱的東西。 –

+0

在那裏,做了這個哈哈。很高興我能幫到:) – sebaferreras

+1

loadingPopup.dismiss(); 你不能再使用它了。讓我們假設我們有一個按鈕,並且每當用戶點擊它時你想要顯示loadingpopup,那麼你需要重新創建loadingpopup。 – Amare

0

對於離子的最後versione您已經辦理辭退事件:

let loading = this.load.create({ 
    content: "Connexion au serveur Migal en cours..." 
}); 

loading.present(); 

loading.onDidDismiss().then(() => { 
    do thinks..... 
}); 
+0

嗯,多虧了你,裝載組件出現了,但是一直運行着:D –

+0

'loading.present(); \t \t \t/*一些東西*/ \t \t \t loading.onDidDismiss(()=> {loading.dismiss();});' –

+0

我試過,但正如我所說,自旋不斷轉動永遠 –

1

我把 「loading.dismiss();」在訂閱{}和它工作得很好:)

    this.http.get(url) 
         .subscribe(data =>{ 
          this.items=JSON.parse(data['_body']).results; 
          loading.dismiss(); 
         }, 
0

可以使用離子ionViewLoaded(),彈出載入控制器,然後關閉它時,查看被加載並從您的訂閱新的內容抓取。

ionViewLoaded() { 
    let lr = this.loading.create({ 
    content: 'Your Display Message...', 
    }); 

    lr.present().then(() => { 
    this.Yourservice.Yourfunction() 
     .subscribe(res => { 
     this.yourresult = res; 
     }); 
    lr.dismiss(); 
    }); 
} 

您也可以像這樣構造代碼,以確保在您關閉加載程序之前訂閱已完成。

ionViewLoaded() { 
     let lr = this.loading.create({ 
     content: 'Your Display Message...', 
     }); 

     lr.present().then(() => { 
     this.Yourservice.Yourfunction() 
      .subscribe(
      data => this.yourresult = data, 
      error => console.log(error), 
     ()=> lr.dismiss() 
     ); 

     }); 
    }