web-dev-qa-db-ja.com

Ionic platform.ready()メソッドが必要です

platform.ready().then(() => {})メソッドについて基本的な質問があります。ネイティブプラグインを使用するたびに、このメソッドを使用する必要がありますか? Status barまたはLocalStorageなどのように?

上記のメソッドをapp.component.tsファイル内でのみ使用する場合、それはルートコンポーネントであるため、それだけでは不十分ですか?このルートコンポーネントの後、platformが他のすべての後続コンポーネントの準備ができていることを期待しますか?では、なぜ他のすべての子コンポーネントにもreadyメソッドを使用する必要があるのでしょうか。ネイティブプラグインがある場合に使用する記事やビデオをたくさん見たので、これが必要ないことを願っていますか?

この公式ドキュメントでは、子コンポーネント内で使用されていることがわかりますか?あなたの考え? platform.ready()。then(( > {}))==

6
Sampath

platform.ready()は、デバイス/ネイティブプラグインの準備ができたら解決するpromiseです。

_ionic sidemenu starter_テンプレートを見てみましょう https://github.com/ionic-team/ionic2-starter-sidemenu/blob/master/src/app/app.component.ts

15行目の_app.component.ts_に示されているように、rootPageが設定され、できるだけ早く読み込まれます。コンストラクターでthis.initializeApp();呼び出し

_this.platform.ready().then(() => {
  // Okay, so the platform is ready and our plugins are available.
  // Here you can do any higher level native things you might need.
  this.statusBar.styleDefault();
  this.splashScreen.hide();
});
_

Javascriptのすべてのpromiseと同様に、いつ解決されるかはわかりません。また、コードでわかるように、ionic-appはプラットフォームの準備が整うのを「待機」しません。 statusBar.styleDefault()およびsplashScreen.hide()呼び出しのみがその約束を待ちます。

約束が解決されるまでに非常に長い時間がかかるとしましょう。たとえば、5秒です。

HomePage、_app.component.ts_内で使用するプロバイダー、またはその他のページ(ユーザーはその間にアプリ内を移動できたため)にionic-nativeコードがある場合、ionic-プラットフォームの準備がまだ整っていないため、ネイティブコールは失敗します。

例として:

_ constructor(public platform: Platform, public statusBar: StatusBar, public splashScreen: SplashScreen, private: qrScanner: QrScanner) {
      this.initializeApp();

      this.qrScanner.scan(); // Let's assume this is a provider we made to start a QR scanner. It will try to load the scanner immediately, regardless of the state of the platform.ready() promise. So if the platform is not ready, it will crash.

      // used for an example of ngFor and navigation
      this.pages = [
        { title: 'Home', component: HomePage },
        { title: 'List', component: ListPage }
      ];

  }
_

つまり、理論的には、ネイティブプラグインを使用する場合は、常にthis.platform.ready()を使用して、プラットフォームが使用可能であることを確認する必要があります。実際には、プラットフォームの準備が非常に速く、使用しなくても違いに気付かないことが多いため、実際には特定のケースによって異なります。しかし、確実にしたい場合は、どこでも使用する必要があります。

8