Sebenarnya ada dua masalah terpisah yang dapat menyebabkan masalah flicker dan Anda mungkin menghadapi salah satu atau keduanya.
Masalah 1: ng-jubah diterapkan terlambat
Masalah ini diselesaikan karena dijelaskan dalam banyak jawaban di halaman ini untuk memastikan AngularJS dimuat di kepala. Lihat dokumen ngCloak :
Untuk hasil terbaik, skrip angular.js harus dimuat di bagian kepala file html; sebagai alternatif, aturan css (di atas) harus dimasukkan dalam stylesheet eksternal aplikasi.
Masalah 2: ng-jubah dihapus terlalu cepat
Masalah ini kemungkinan besar terjadi ketika Anda memiliki banyak CSS di halaman Anda dengan aturan yang saling mengalir satu sama lain dan lapisan CSS yang lebih dalam menyala sebelum lapisan atas diterapkan.
Solusi jQuery dalam jawaban yang melibatkan penambahan style="display:none"
ke elemen Anda bisa menyelesaikan masalah ini selama gaya dihapus cukup terlambat (sebenarnya solusi ini menyelesaikan kedua masalah). Namun, jika Anda memilih untuk tidak menambahkan gaya langsung ke HTML Anda, Anda dapat mencapai hasil yang sama dengan menggunakan ng-show
.
Dimulai dengan contoh dari pertanyaan:
<ul ng-show="foo != null" ng-cloak>..</ul>
Tambahkan aturan ng-show tambahan ke elemen Anda:
<ul ng-show="isPageFullyLoaded && (foo != null)" ng-cloak>..</ul>
(Anda harus tetap ng-cloak
menghindari masalah 1).
Kemudian di set app.run Anda isPageFullyLoaded
:
app.run(['$rootScope', function ($rootScope) {
$rootScope.$safeApply = function (fn) {
$rootScope.isPageFullyLoaded = true;
}
}]);
Ketahuilah bahwa tergantung pada apa yang Anda lakukan, app.run mungkin atau mungkin bukan tempat terbaik untuk ditetapkan isPageFullyLoaded
. Yang penting adalah memastikan bahwa isPageFullyLoaded
menjadi true setelah apa pun yang Anda tidak ingin berkedip siap untuk diungkapkan kepada pengguna.
Kedengarannya seperti Masalah 1 adalah masalah yang ditabrak OP, tetapi yang lain menemukan bahwa solusi tidak berfungsi atau hanya berfungsi sebagian karena mereka malah memukul Masalah 2 atau juga.
Catatan Penting: Pastikan untuk menerapkan solusi untuk kedua ng-jubah yang diterapkan terlambat DAN dihapus untuk segera. Memecahkan hanya satu dari masalah ini mungkin tidak menghilangkan gejala.