离子 - 错误:未捕获(在承诺中):找不到removeView

Sam*_*los 25 ionic-framework ionic-view ionic2 ionic3

我的Ionic应用程序工作正常,我没有做任何事情,但突然间我得到了这个错误,我不知道为什么.

"错误:未捕获(在承诺中):找不到removeView

Man*_*egi 49

删除组件不是任何问题的解决方案.

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

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

类似地,在解除加载器时,检查加载器实例是否存在,然后才解除它.

码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Raj*_*dev 41

如果要手动关闭离子加载,可能需要按照以下示例进行操作.我在离子实验室测试过的工作正常.

Ionic 3+
Run Code Online (Sandbox Code Playgroud)

注意: 如果你手动调用this.loading.dismiss(),我不建议使用dismissOnPageChange,你可能会解雇相同的加载两次.

为什么以下解决方案有效?

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

因此,如果我们需要手动关闭,我们需要确保已经存在加载并且有一个视图来解除它,我们应该使用其他方法,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
            });
      });
   }
}
Run Code Online (Sandbox Code Playgroud)

参考链接,因此只发布有用的工作提示和代码.

我希望这有帮助!