LoadingController,Ionic2,使用时自动消失,dismissOnPageChange:true

时间:2017-04-20 04:50:25

标签: ionic2

我正在使用loadingController Ionic2。

`fetchNotificationListAferUserDataget(){

this.loader = this._loadingController.create({
  content: "Please wait... Fetching online notifications",
  dismissOnPageChange:true
});
this.loader.present();  

this._userDataService.getNotificationList()
  .subscribe(
    (data) => {
      this.loader.dismiss();
      let status = data.status;
      let returnedData = data.json();
      console.log(status,returnedData)
      if(data.status == 200){

        if(returnedData.notifications.length > 0){
          this.notifications = returnedData.notifications;
          console.log(this.notifications);
          this.loader = this._loadingController.create({
            content: "Please wait... Fetching your purchased packages"
          });
          this.loader.present();
          this._userDataService.getAllPackageByUser(this.userData.user_id)
            .subscribe(
              (data) => this.populateUserPackages(data),
              (err) => this.showDataFetchErrorFromServer('Unable to fetch user packages')
            )
        }else if(returnedData.notifications.result == 0){
          console.log('no notifications found');
        }
      }
    },
    (err) => {
      this.showDataFetchErrorFromServer('Unable to fetch notifications')
    }
  );//end .subscribe
};`

但我遇到的问题是加载器在没有调用loader.dismiss()的情况下自动出现和消失;

是否有其他人面临同样的问题。任何解决方案。

编辑:包含完整功能代码。加载器在 loader.present()之后立即关闭,没有任何错误,但是当我调用 this.loader.dismiss(); 时,它会给我错误,因为加载器已经被解除

3 个答案:

答案 0 :(得分:1)

根据this issue,这是由于在错误的生命周期挂钩上触发loader.present()而引起的。我也遇到了同样的问题,我在ionViewDidLoad()钩子上加载了加载程序。 “不能保证在ionViewDidLoad中已准备好dom,也不能保证事件已准备就绪。”

尝试在ionViewDidEnter()钩子上显示加载程序。

答案 1 :(得分:0)

我有类似的问题。很可能你需要使用NgZone。

这样的事情:

{... "field_name":"param1", "field_value":83}

" Angular 2在其自己的特殊区域NgZone内部运行。在区域内运行允许人们检测异步任务何时 - 可以改变应用程序内部状态的事情,以及它的视图 - 开始和结束。由于这些异步任务是导致我们的视图改变的唯一因素,因此通过检测它们何时被执行,Angular 2知道可能需要更新视图。"

答案 2 :(得分:-2)

您需要使用setTimeout()。像:

setTimeout(() => {
  this.loader.dismiss();
}, 1000);

另外,请不要使用相同的变量this.loader来创建2个加载器。只需使用var loading = this._loadingController.create()等本地变量即可。这可能会在加载API时产生问题。在离子2文档here中,提到了:

  

请注意,在组件被解除后,它将不再可用,并且必须创建另一个组件。这可以通过将组件的创建和表示包装在可重用的函数中来避免,如下面的使用部分所示。