2017-05-07 72 views

回答

19

当您想手动关闭离子加载时,可能需要按照以下示例进行操作。哪些工作正常,我已经在离子实验室进行了测试。

Ionic 3+ 

注: 如果调用this.loading.dismiss()手动,我不建议使用dismissOnPageChange,你可能驳回相同负载的两倍。

为什么下面的解决方案有效?

我认为this.loading.present()是一种异步方法,因此当this.loading.present()仍在运行时,我们不能手动调用this.loading.dismiss()

因此,如果我们需要手动解锁,我们需要确保加载已提交并有解除它的视图,我们应在present().then之后使用其他方法,如下面的代码。

但是我不确定为什么我们在旧的框架版本(2.0.3)中没有这个问题。

import { Loading, LoadingController } from 'ionic-angular'; 

export class ApnSearchPage { 
    loading: Loading; 
    constructor(private loadingCtrl: LoadingController) { } 

    ionViewDidLoad() { 
    this.createLoader(); 
    } 

    createLoader(message: string = "Please wait...") { // Optional Parameter 
    this.loading = this.loadingCtrl.create({ 
     content: message 
    }); 
    } 

    public searchClick() { 
     this.createLoader(); 
     this.loading.present().then(() => { 
     this.searchService.submitRequest(params, data) 
      .subscribe(response => { 
       this.loading.dismiss(); 
      }, error => { 
       this.loading.dismiss(); 
       this.errorMessage = <any>error 
      }); 
     }); 
    } 
} 

Reference Link,因此发布唯一有用的和工作技巧和代码。

我希望这有助于!

2

我设法通过从组件中删除加载控制器来解决它。

+0

你是怎么删除它的? –

+1

这不是一个答案。正确的答案在上面。 –

1

我删除了loading.dismiss函数并解决了它。

17

删除组件是而不是解决任何问题。

问题原因:有多个调用来解除加载组件的方法。

解决方案: 在创建装载机,检查装载情况是已经存在,才创建另一个实例。

同样,在解散加载程序时,检查加载程序实例是否存在,然后才解雇它。

代码:

constructor(private _loadingCtrl: LoadingController){} 

loading; 

showLoading() { 
    if(!this.loading){ 
     this.loading = this._loadingCtrl.create({ 
      content: 'Please Wait...' 
     }); 
     this.loading.present(); 
    } 
} 

dismissLoading(){ 
    if(this.loading){ 
     this.loading.dismiss(); 
     this.loading = null; 
    } 
} 
+0

大..其工作 –

+0

这应该是正确的解决方案! – Vasyl

-1

它说,你叫loading.dismiss()load.presenet()之前结束。 你应该尝试

let a = this.loadingCtrl.create({content : 'hello world'}) 
await a.present(); 
.. 
.. // your code goes here.. 
... 
a.dismiss() 
0

这里是一个用于alertController但工程非常相似。

logout() { 
    let prompt = this.alertCtrl.create({ 
    title: 'Logout', 
    subTitle: 'Are You Sure You Want To Logout?', 
    buttons: [ 
     { 
     text: 'No', 
     handler: data => { 
      let navTransition = prompt.dismiss(); 
      navTransition.then(() => { 
      this.navCtrl.pop(); 
      }); 
     return false; 
     } 

    }, 
    { 
     text: 'Yes', 
     handler: data => { 
     this.lgout(); 
     } 
    } 
    ] 
    }); 
prompt.present(); 
} 
0

这是我对这个问题最简单的解决办法:不要施工内初始化加载器(它的工作原理:

实施LoadingController

注意,当我有这个问题只有第一次,从第二次你会卡住删除查看未发现问题)

loading:any; 

this.loading=this.loadingCtrl.create({ 
     spinner:'bubbles', 
     content:`Please wait..` 
     }); 

我当时显示装载机,同时从服务器 下面获取数据是代码时,我卡住了去掉观点没有被发现

gosignup(number:string){ 

    this.loading.present();//showing the loader 
    //calling webservice 
    this.Authprovider.smsverify(number).subscribe(
     data=>{ 

     this.loading.dismiss();//this created the problem    
     if(data.json().msg=="success"){ 
      this.navCtrl.push(SignupPage,{ 
      user:this.Usersignup 
      }) 
     } 

     if(data.json().msg=="error"){ 
      this.showToastWithCloseButton("Invalid otp"); 
     } 

     }, 

     err=>{ 
      this.loading.dismiss(); 
      this.showToast("Please try again later"); 
     }, 

    ()=>{ 
     } 

    ); 



    } 

要修复这个问题,需要关闭该完成内部装载机方法

()={ 
       this.loading.dismiss();//this saved my life 

} 

希望它会解决你的问题了。

相关问题