web-dev-qa-db-fra.com

Ionic - Erreur: Non capturé (promis): removeView n'a pas été trouvé

Mon application ionique fonctionnait bien et je n'y ai rien fait, mais tout à coup, je reçois cette erreur et je ne sais pas pourquoi.

"Erreur: Non capturé (promis): removeView n'a pas été trouvé

23
Samir Boulos

Lorsque vous souhaitez supprimer manuellement le chargement ionique, vous devrez peut-être suivre l'exemple ci-dessous. Ce qui fonctionne bien, j'ai testé dans des laboratoires ioniques.

Ionic 3+

Note: Si vous appelez this.loading.dismiss () manuellement, je ne vous recommande pas d'utiliser la méthode ignoreOnPageChange, vous ignorez probablement le même chargement deux fois.

Pourquoi la solution ci-dessous fonctionne-t-elle? 

Je pense que this.loading.present() est une méthode asynchrone, nous ne pouvons donc pas appeler this.loading.dismiss() manuellement lorsque this.loading.present() est toujours en cours d'exécution.

Donc, si nous devons ignorer manuellement, nous devons nous assurer que le chargement est déjà présent et que nous voulons le faire disparaître, nous devrions utiliser une autre méthode après present().then, comme le code suivant.

Cependant, je ne sais pas pourquoi nous n'avions pas ce problème dans l'ancienne version du framework (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
            });
      });
   }
}

Lien de référence , ne publie donc que des astuces et du code utiles et utiles.

J'espère que ça aide!

37
RajeshKdev

La suppression d'un composant est pas une solution à tout problème.

Cause du problème: _ Il y a plusieurs appels à rejeter la méthode de chargement du composant.

Solution: Lors de la création du chargeur, vérifiez si l'instance du chargeur est pasdéjà présente, puis créez une autre instance.

De même, lors de la suppression du chargeur, vérifiez si l'instance du chargeur existe _, puis ne la fermez pas.

Code:

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;
    }
}
46
Manoj Negi

J'ai réussi à le résoudre en supprimant le LoadingController de mon composant.

1
Samir Boulos

Pour moi, le problème était que j'avais

dismissOnPageChange: true

quand j'ai créé le loadingCtrl.

Le .dismiss () était appelé trop tôt après le .present () (lors du test local, l'API répond très vite) et il semble que ce paramètre soit à l'origine du problème. Le supprimer l'a résolu pour moi.

0
jeudyx

J'ai enlevé la fonction loading.dismiss et l'ai résolue.

0
chii

il dit que vous avez appelé à loading.dismiss () avant que load.presenet () se termine. tu devrais essayer

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

S'il vous plaît essayer le ci-dessous qui a fonctionné pour moi

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)
        })
    }
 }
0
puneet

Voici ma solution la plus simple à ce problème:

J'ai eu ces problèmes lors de la mise en œuvre du LoadingController

Remarque: N'initialisez pas le chargeur dans la construction (cela ne fonctionne que la première fois et à partir de la deuxième fois, vous serez bloqué avec le problème remove view not found)

loading:any;

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

J'affichais le chargeur tout en récupérant les données du serveur Ci-dessous le code de travail

 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
      }

      );



  }

J'espère que cela résoudra les problèmes SO 

0
Suraj Bahadur

Voici un pour le alertController mais fonctionne très similaire.

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
Kevin Ripley