web-dev-qa-db-ja.com

Ionic-エラー:キャッチされません(約束):removeViewが見つかりませんでした

Ionicアプリは正常に動作し、何もしていませんが、突然このエラーが発生し、その理由がわかりません。

「エラー:キャッチされません(約束):removeViewが見つかりませんでした

25
Samir Boulos

Ionicのロードを手動で解除する場合は、次の例に従う必要があります。 ionicのラボでテストしたところ、どれが正常に機能しています。

Ionic 3+

注:this.loading.dismiss()を手動で呼び出す場合は、お勧めしませんdismissOnPageChangeを使用すると、おそらく同じ読み込みを2回破棄しています。

以下のソリューションが機能する理由

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

参照リンク 、したがって、有用で実用的なヒントとコードのみを掲載しました。

これがお役に立てば幸いです!

41
RajeshKdev

コンポーネントの削除はnotの問題の解決策です。

問題の原因:コンポーネントをロードするメソッドを閉じるための呼び出しが複数あります。

解決策:ローダーの作成中に、ローダーインスタンスがnot既に存在するであるかどうかを確認してから、別のインスタンスを作成します。

同様に、ローダーを閉じている間、ローダーインスタンスdoes existsがあるかどうかを確認してから、それだけを閉じます。

コード:

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

私にとって、問題は私が持っていたことでした

dismissOnPageChange: true

loadingCtrlを作成したとき。

.dismiss()は、.present()の直後に呼び出されていました(ローカルテスト中、APIは非常に高速に応答します)。そのパラメータが問題を引き起こしたようです。削除することで解決しました。

0
jeudyx

コンポーネントからLoadingControllerを削除することで、なんとか解決できました。

0
Samir Boulos

最新バージョンの@ ionic/app-scripts 3.3.0に更新しましたが、これは私のアプリでも発生しています。

0
MD.Riyaz

Loading.dismiss関数を削除して解決しました。

0
chii

load.presenet()が終了する前に、loading.dismiss()を呼び出したということです。試してみてください

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

私のために働いた以下を試してください

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

この問題に対する私の最も簡単な解決策は次のとおりです。

LoadingControllerを実装するときにこの問題が発生しました

注:コンストラクション内でローダーを初期化しないでください(初回のみ機能し、2回目以降はビューが見つからないという問題が発生します)

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の問題を解決することを願っています

0
Suraj Bahadur

AlertControllerの1つですが、非常によく似ています。

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