จริงๆแล้วมีปัญหาสองอย่างที่แยกจากกันซึ่งอาจทำให้เกิดปัญหาการกะพริบ
ปัญหาที่ 1: ใช้เสื้อคลุม - สายเกินไป
ปัญหานี้ได้รับการแก้ไขเนื่องจากมีคำตอบมากมายในหน้านี้เพื่อให้แน่ใจว่ามีการโหลด AngularJS ไว้ในส่วนหัว ดูเอกสาร ngCloak :
เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดสคริปต์ angular.js จะต้องโหลดในส่วนหัวของไฟล์ html หรือมิฉะนั้นต้องรวมกฎ css (ด้านบน) ไว้ในสไตล์ชีทภายนอกของแอปพลิเคชัน
ปัญหาที่ 2: เอา ng-cloak ออกเร็วเกินไป
ปัญหานี้มักเกิดขึ้นเมื่อคุณมี CSS จำนวนมากบนหน้าเว็บของคุณโดยมีกฎเรียงซ้อนกันและ CSS ของเลเยอร์ที่ลึกขึ้นก่อนที่จะมีการใช้เลเยอร์ด้านบน
โซลูชัน jQuery ในคำตอบที่เกี่ยวข้องกับการเพิ่มstyle="display:none"
องค์ประกอบของคุณจะแก้ปัญหานี้ตราบใดที่สไตล์ถูกลบออกช้าพอ (อันที่จริงแล้วโซลูชันเหล่านี้แก้ปัญหาทั้งสองได้) อย่างไรก็ตามหากคุณไม่ต้องการเพิ่มสไตล์ลงใน HTML ของคุณโดยตรงคุณสามารถใช้ผลลัพธ์เดียวกันได้ng-show
ได้
เริ่มต้นด้วยตัวอย่างจากคำถาม:
<ul ng-show="foo != null" ng-cloak>..</ul>
เพิ่มกฎ ng-show เพิ่มเติมให้กับองค์ประกอบของคุณ:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(คุณต้องng-cloak
หลีกเลี่ยงปัญหา 1)
จากนั้นใน app.run ของคุณตั้งค่าisPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
โปรดทราบว่าขึ้นอยู่กับสิ่งที่คุณกำลังทำ app.run isPageFullyLoaded
อาจหรือไม่อาจจะเป็นสถานที่ที่ดีที่สุดในชุด สิ่งสำคัญคือการทำให้แน่ใจว่าการisPageFullyLoaded
ตั้งค่าเป็นจริงหลังจากสิ่งที่คุณไม่ต้องการกะพริบพร้อมที่จะเปิดเผยต่อผู้ใช้
ดูเหมือนว่า ปัญหา 1เป็นปัญหาที่ OP กำลังกดปุ่ม แต่คนอื่น ๆ พบว่าวิธีการแก้ปัญหาไม่ทำงานหรือทำงานเพียงบางส่วนเพราะพวกเขากำลังตีปัญหา 2แทนหรือดีกว่า
หมายเหตุสำคัญ:ต้องแน่ใจว่าใช้วิธีแก้ปัญหากับเสื้อคลุมทั้งสองที่ใช้งานช้าเกินไปและลบออกในไม่ช้า การแก้ไขปัญหาเหล่านี้เพียงข้อเดียวอาจไม่ช่วยบรรเทาอาการได้