angular - จำเป็นต้องใช้เมธอด platform.ready() ของ Ionic
ฉันมีคำถามพื้นฐานเกี่ยวกับวิธี platform.ready().then(() => {}) เราจำเป็นต้องใช้วิธีนี้ทุกครั้งที่เราใช้ปลั๊กอินเนทีฟหรือไม่? เช่น Status bar หรือ LocalStorage หรืออื่น ๆ?
จะไม่พอหรือถ้าเราใช้วิธีข้างต้นแค่ในไฟล์ app.component.ts เท่านั้นเพราะมันคือคอมโพเนนต์ราก หลังจากคอมโพเนนต์รากนี้ หวังว่า platform จะพร้อมสำหรับคอมโพเนนต์อื่น ๆ ต่อไปทั้งหมดใช่ไหม แล้วทำไมเราต้องใช้วิธี ready ในคอมโพเนนต์ลูกอื่น ๆ ทุกตัวด้วย? เพราะฉันเห็นบทความและวิดีโอหลายอันที่ใช้ ถ้ามีปลั๊กอินเนทีฟ หวังว่านี่คงไม่จำเป็นใช่ไหม?
ในเอกสารทางการนี้ คุณสามารถเห็นว่ามันถูกใช้ภายในคอมโพเนนต์ลูกด้วยใช่ไหม? คุณคิดเห็นอย่างไร? platform.ready().then(() => {})
คำตอบ #1
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 จะถูกตั้งค่าและจะถูกโหลดโดยเร็วที่สุด ใน constructor 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();
});
เช่นเดียวกับพรอมิสทุกตัวในจาวาสคริปต์ คุณไม่สามารถบอกได้ว่าจะเกิดการแก้ไขเมื่อใด และตามที่คุณเห็นในโค้ด แอป Ionic ไม่ได้ "รอ" ให้แพลตฟอร์มพร้อม เพียงแค่คำสั่ง statusBar.styleDefault() และ splashScreen.hide() เท่านั้นที่รอพรอมิสนั้น
สมมติว่าการดำเนินการสัญญานั้นใช้เวลานานมากที่จะเสร็จสมบูรณ์ เช่น 5 วินาที
ถ้าคุณมีโค้ด ionic-native ใดๆ อยู่ใน HomePage, provider ใดๆ ที่คุณใช้ภายใน app.component.ts หรือหน้าอื่นๆ (เพราะผู้ใช้อาจจะนำทางรอบๆ แอปแล้วในช่วงเวลานั้น), การเรียกใช้ ionic-native จะล้มเหลวเพราะแพลตฟอร์มยังไม่พร้อม
ตัวอย่างเช่น:
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() เสมอเมื่อใช้ปลั๊กอินเนทีฟเพื่อให้แน่ใจว่าพลตฟอร์มพร้อมใช้งาน ในทางปฏิบัติจริง มันขึ้นอยู่กับกรณีเฉพาะเพราะบ่อยครั้งที่พลตฟอร์มพร้อมใช้งานอย่างรวดเร็วและคุณอาจไม่สังเกตเห็นความแตกต่างหากไม่ใช้มัน แต่ถ้าคุณต้องการความแน่ใจ คุณควรใช้มันทุกที่
