บางครั้งฉันจำเป็นต้องใช้$scope.$apply
ในโค้ดของฉันและบางครั้งก็แสดงข้อผิดพลาด "การสรุปข้อมูลที่กำลังดำเนินการอยู่" ดังนั้นผมจึงเริ่มที่จะหาทางรอบนี้และพบว่าคำถามนี้: AngularJS:. ป้องกันข้อผิดพลาด $ ย่อยแล้วในความคืบหน้าเมื่อโทร $ $ ขอบเขตใช้ () อย่างไรก็ตามในความคิดเห็น (และในวิกิเชิงมุม) คุณสามารถอ่าน:
อย่าทำถ้า (! $ scope. $$ phase) $ scope $ apply () หมายความว่า $ ขอบเขตของคุณ $ apply () ไม่สูงพอใน call stack
ตอนนี้ฉันมีสองคำถาม:
- เหตุใดจึงเป็นรูปแบบการต่อต้าน?
- ฉันจะใช้ $ scope อย่างปลอดภัย $ สมัครได้อย่างไร
"วิธีแก้ปัญหา" อื่นเพื่อป้องกันข้อผิดพลาด "ไดเจสต์กำลังดำเนินการอยู่" ดูเหมือนว่ากำลังใช้ $ timeout:
$timeout(function() {
//...
});
นั่นคือวิธีที่จะไป? ปลอดภัยกว่าไหม ดังนั้นนี่คือคำถามที่แท้จริง: ฉันจะสิ้นเชิงขจัดความเป็นไปได้ของข้อผิดพลาด "ย่อยแล้วในความคืบหน้า" หรือไม่?
PS: ฉันใช้ $ ขอบเขตเท่านั้น $ ใช้ในการเรียกกลับที่ไม่ใช่ angularjs ที่ไม่ซิงโครนัส (เท่าที่ฉันรู้ว่านั่นคือสถานการณ์ที่คุณต้องใช้ $ ขอบเขต $ ใช้ถ้าคุณต้องการนำการเปลี่ยนแปลงไปใช้)
scope
จากภายในเชิงมุมหรือจากภายนอกเชิงมุม ดังนั้นตามนี้คุณมักจะรู้ว่าคุณจำเป็นต้องโทรscope.$apply
หรือไม่ และถ้าคุณใช้รหัสเดียวกันสำหรับการจัดการทั้งเชิงมุม / ไม่ใช่เชิงมุมแสดงscope
ว่าคุณทำผิดก็ควรแยกออกจากกันเสมอ ... ดังนั้นโดยทั่วไปหากคุณพบกรณีที่คุณต้องตรวจสอบscope.$$phase
รหัสของคุณจะไม่ ออกแบบด้วยวิธีที่ถูกต้องและมีวิธีที่จะทำ 'วิธีที่ถูกต้อง' อยู่