ด้วยเหตุผลบางประการฉันต้องเรียกใช้แอปในโหมดการผลิต ความแตกต่างระหว่างโหมดเหล่านี้คืออะไร?
ด้วยเหตุผลบางประการฉันต้องเรียกใช้แอปในโหมดการผลิต ความแตกต่างระหว่างโหมดเหล่านี้คืออะไร?
คำตอบ:
ในโหมดการพัฒนาการตรวจจับการเปลี่ยนแปลงจะรันครั้งที่สองทันทีหลังจากการรันครั้งแรกและสร้างข้อผิดพลาดหากค่าที่ถูกผูกไว้มีการเปลี่ยนแปลงระหว่างการรันครั้งแรกและครั้งที่สอง สิ่งนี้ช่วยในการค้นหาจุดบกพร่องที่การตรวจสอบค่ามีผลข้างเคียงหรือฟิลด์หรือฟังก์ชั่นไม่คืนค่าเดียวกันในการโทรครั้งต่อ ๆ ไปซึ่งทำลายการตรวจจับการเปลี่ยนแปลงของ Angular
ในโหมดการพัฒนาในระหว่างการดำเนินการตรวจจับการเปลี่ยนแปลงครั้งที่สอง Angular ยังทำการเปรียบเทียบวัตถุเชิงลึกบางอย่างที่จะไม่ทำในการผลิตเพื่อตรวจจับการเปลี่ยนแปลงโมเดลที่ไม่ได้รับอนุญาต
อัปเดต:
ในโหมดการพัฒนาคำแนะนำนี้จะพิมพ์ไปยังคอนโซลเมื่อบริการเจลทำความสะอาด HTML แถบค่าจากการผูกหรือ[innerHTML]="..."
[ngStyle]="..."
ดูเพิ่มเติม: ใน RC.1 บางสไตล์ไม่สามารถเพิ่มโดยใช้ไวยากรณ์การผูก
เอกสารสำหรับสถานะApplicationRef.tick () :
ในโหมดการพัฒนา
tick()
ยังดำเนินการรอบการตรวจจับการเปลี่ยนแปลงที่สอง (TTL = 2) เพื่อให้แน่ใจว่าไม่มีการตรวจพบการเปลี่ยนแปลงเพิ่มเติม หากมีการเปลี่ยนแปลงเพิ่มเติมในรอบที่สองนี้การเชื่อมโยงในแอปจะมีผลข้างเคียงที่ไม่สามารถแก้ไขได้ในการตรวจจับการเปลี่ยนแปลงครั้งเดียว ในกรณีนี้ Angular จะแสดงข้อผิดพลาดเนื่องจากแอปพลิเคชัน Angular สามารถมีการตรวจจับการเปลี่ยนแปลงได้เพียงครั้งเดียวในระหว่างที่การตรวจจับการเปลี่ยนแปลงทั้งหมดจะต้องเสร็จสมบูรณ์
สาเหตุที่เราไม่สามารถเปลี่ยนแปลงเพิ่มเติมได้เนื่องจากในโหมดการใช้งานจริงการตรวจจับการเปลี่ยนแปลงจะทำงานเพียงครั้งเดียวซึ่งหมายความว่าทุกส่วนประกอบในโครงสร้างส่วนประกอบจะถูกตรวจสอบเพียงครั้งเดียว (TTL = 1) ... จากด้านบนในเชิงลึกก่อน ใบสั่ง. ดังนั้นหากการเปลี่ยนแปลงคุณสมบัติอินพุตของคอมโพเนนต์ย่อยทำให้เกิดการเปลี่ยนแปลงกับคุณสมบัติอื่น ๆ ที่คอมโพเนนต์พาเรนต์ผูกไว้ในมุมมอง / เทมเพลตมุมมองของคอมโพเนนต์พาเรนต์จะไม่ถูกอัพเดต (เนื่องจากการตรวจจับการเปลี่ยนแปลงจะไม่กลับมา องค์ประกอบหลักในโหมดการใช้งานจริง ... เนื่องจากการข้ามต้นไม้แบบ "one pass") มันจะได้รับการอัปเดตในครั้งถัดไปที่มีเหตุการณ์บางอย่างเกิดขึ้นและการตรวจจับการเปลี่ยนแปลงจะดำเนินการอีกครั้ง แต่ก็สายเกินไป!
นี่คือPlunkerที่ละเมิดกฎ - องค์ประกอบลูกมีset
วิธีการในคุณสมบัติอินพุตที่แก้ไขคุณสมบัติอินพุตอื่น ใช่เป็นตัวอย่างที่สร้างขึ้น แต่เข้าใจง่ายกว่าตัวอย่างถัดไป:
อีกสถานการณ์หนึ่งที่คุณอาจประสบปัญหานี้คือท่อที่มีสถานะ ตรวจสอบคำตอบนี้ว่าเป็นปัญหาของคุณหรือไม่
คุณควรอธิบายปัญหาของคุณ (ในคำถาม SO อื่น) น่าจะมีวิธีแก้ไขได้