Ionic - Error: Uncaught (in promise): removeView was not found

Ionic - Error: Uncaught (in promise): removeView was not found

我的 Ionic 应用程序运行良好,我没有对其进行任何操作,但突然出现此错误,我不知道为什么。

"Error: Uncaught (in promise): removeView was not found

我设法通过从我的组件中删除 LoadingController 来解决它。

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

当您想要手动关闭 Ionic 加载时,您可能需要按照以下示例操作。我在离子实验室测试过,效果很好。

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,因此仅发布有用且有效的提示和代码。

希望对您有所帮助!

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

问题原因: 多次调用加载组件的dismiss方法

解法: 创建加载器时,检查加载器实例是否已经存在,然后再创建另一个实例。

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

代码:

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;
    }
}

它说你在 load.presenet() 结束之前调用了 loading.dismiss()。 你应该试试

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

这是 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();
}

这是我对这个问题最简单的解决方案:

我在实现 LoadingController

时遇到了这个问题

注意:不要在构造中初始化加载器(它只在第一次工作,从第二次开始你会遇到 remove view not found 问题)

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();//to dismiss loader        
        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();//to dismiss loader
      }

      );



  }

希望它能解决SO问题

对我来说,问题是我有

dismissOnPageChange: true

当我创建 loadingCtrl 时。

在 .present() 之后调用 .dismiss() 的时间过早(在本地测试期间,api 响应非常快),似乎是该参数导致了问题。删除它为我解决了它。

请尝试以下对我有用的方法

import { App } from 'ionic-angular';
export class PopoverPage {
   constructor(public navCtrl: NavController
     , public viewCtrl: ViewController
    , public appCtrl: App) {
         this.viewCtrl.dismiss().then(()=>{
          setTimeout(()=>{
            confirm.dismiss().then(()=>{
              this.appCtrl.getRootNav().setRoot('DashboardPage');
            })
          },300)
        })
    }
 }

我更新到最新版本@ionic/app-scripts 3.3.0,这也发生在我的应用程序中。

对我来说,简单的修复正在改变:

this.loader.dismiss()

至:

this.loader.dismiss().then(value => {
    console.log("dismiss worked!");
}, reason => {
    console.log("dismiss rejected!");
});