2017-07-04 6 views
1

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

上記の方法をapp.component.tsファイル内でのみ使用すると、それだけでは不十分ですか?ルートコンポーネントですか。このルートコンポーネントの後に、platformは他のすべてのコンポーネントに対応していますか?それでは、なぜそれぞれの子コンポーネントと他のすべての子コンポーネントもreadyメソッドを使用する必要がありますか?なぜなら、ネイティブプラグインがあれば、私は非常に多くの記事やビデオを見ているからです。

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

+0

公式ドキュメントには、すべての子コンポーネント内でplatform.ready()を使用するという情報はありますか? –

+0

いいえ、ルートコンポーネント(app.ponent.tsなど)内でのみ使用する方法についての情報はありますか? @ChristianBenseler – Sampath

+0

私はあなたのために何かを見つけたことを願っています。これを見てください。それは子供のコンポーネントの中でも使います。あなたの考え? @ChristianBenseler https://ionicframework.com/docs/native/#Add_Plugins_to_Your_App_Module – Sampath

答えて

3

platform.ready()は、デバイス/ネイティブプラグインの準備が整い次第、解決される約束です。

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

app.component.tsの15行目にあるように、rootPageが設定され、できるだけ早く読み込まれます。コンストラクタで​​それは解決時にJavaScriptですべての約束と同じように、あなたが言うことができない

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

呼び出します。また、コードでわかるように、ionic-appはプラットフォームの準備ができていることを「待機」していません。 statusBar.styleDefault()splashScreen.hide()コールだけがその約束を待っています。

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

あなたHomePage内の任意のイオン・ネイティブコード、(ユーザーがすでにその期間中のアプリをナビゲートする可能性があるため)あなたがapp.component.tsまたは他のページ内で使用するすべてのプロバイダを持っている場合は、イオン性-ネイティブ呼び出しは失敗しますので、プラットフォームはまだ準備ができていません。一例として、

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()を使用しなければならないことを意味します。実際には、実際には特定のケースに依存します。なぜなら、しばしばプラットフォームが非常に速く準備されているため、使用しないと違いに気づかないからです。しかし、確かめたいなら、どこでもそれを使うべきです。

+0

'' async/await'パターンを 'promise'の' root'コンポーネント内で使用するとどうなりますか? – Sampath

+1

その約束のために 'async/await'を使用すると、それに続くすべてのイオン固有のコードは問題ありません。しかし、 'rootPage = HomePage'はまだ' async/await'関数の外部で起こるので、 'async/await'がJavaScriptコード全体の実行を止めないので、そこにあるすべてのものがクラッシュする可能性があります。これを解決するために、 'platform.ready()'の内側または/にrootPageを割り当てることができます。しかし、それは私がお勧めしないあなたのアプリ全体をブロックするだろう。 –

+0

ありがとう:) – Sampath

関連する問題