Ionic - Ошибка: нечистота (в обещании): removeView не найден

My Ionic app работает нормально, и я ничего не сделал с этим, но вдруг я получаю эту ошибку, и я не знаю почему.

"Ошибка: не показано (в обещании): removeView не найден

Ответы

Ответ 1

Если вы хотите вручную отключить ионную загрузку, вам может потребоваться следовать приведенному ниже примеру. Что хорошо работает, я проверил в ионных лабораториях.

Ionic 3+

Примечание: Если вы вызываете 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
            });
      });
   }
}

Ссылка, поэтому размещены только полезные и рабочие советы и код.

Надеюсь, это поможет!

Ответ 2

Удаление компонента не решение любой проблемы.

Причина проблемы: Существует несколько вызовов для отклонения метода загрузки компонента.

Решение: Создав загрузчик, проверьте, не присутствует ли экземпляр загрузчика не , а затем создайте другой экземпляр.

Аналогично, при увольнении загрузчика, проверьте, существует ли экземпляр загрузчика , а затем отклоните его.

Код:

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

Ответ 3

Мне удалось решить эту проблему, удалив LoadController из моего компонента.

Ответ 4

Я удалил функцию load.dismiss и решил ее.

Ответ 5

он говорит, что вы вызвали load.dismiss() до того, как load.presenet() закончил. вы должны попробовать

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

Ответ 6

Вот один для 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();
}

Ответ 7

Вот мое простейшее решение этой проблемы:

У меня возникли эти проблемы при реализации 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();//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
      }

      );



  }

Надеюсь, что это решит так проблемы

Ответ 8

Для меня проблема была в том, что у меня было

dismissOnPageChange: true

когда я создал loadingCtrl.

.Dismiss() вызывался слишком скоро после .present() (во время локального тестирования API реагирует очень быстро), и кажется, что этот параметр вызвал проблему. Удаление это решило это для меня.

Ответ 9

Пожалуйста, попробуйте ниже, который работал для меня

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

Ответ 10

Я обновил до последней версии @ionic/app-scripts 3.3.0, и это также происходит в моем приложении.