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()
を使用しなければならないことを意味します。実際には、実際には特定のケースに依存します。なぜなら、しばしばプラットフォームが非常に速く準備されているため、使用しないと違いに気づかないからです。しかし、確かめたいなら、どこでもそれを使うべきです。
公式ドキュメントには、すべての子コンポーネント内でplatform.ready()を使用するという情報はありますか? –
いいえ、ルートコンポーネント(app.ponent.tsなど)内でのみ使用する方法についての情報はありますか? @ChristianBenseler – Sampath
私はあなたのために何かを見つけたことを願っています。これを見てください。それは子供のコンポーネントの中でも使います。あなたの考え? @ChristianBenseler https://ionicframework.com/docs/native/#Add_Plugins_to_Your_App_Module – Sampath