Jawaban yang telah diberikan sejauh ini hanya akan berfungsi saat pertama kali ng-repeatdiberikan , tetapi jika Anda memiliki dinamika ng-repeat, artinya Anda akan menambahkan / menghapus / memfilter item, dan Anda harus diberi tahu setiap kali bahwang-repeat diberikan, solusi itu tidak akan bekerja untuk Anda.
Jadi, jika Anda perlu diberi tahu SETIAP SAAT bahwa yang di ng-repeat-re-render dan bukan hanya pertama kali, saya telah menemukan cara untuk melakukan itu, ini cukup 'retas', tetapi akan berfungsi dengan baik jika Anda tahu apa yang Anda lakukan perbuatan. Gunakan ini $filterdi Anda ng-repeat sebelum Anda menggunakan yang lain$filter :
.filter('ngRepeatFinish', function($timeout){
return function(data){
var me = this;
var flagProperty = '__finishedRendering__';
if(!data[flagProperty]){
Object.defineProperty(
data,
flagProperty,
{enumerable:false, configurable:true, writable: false, value:{}});
$timeout(function(){
delete data[flagProperty];
me.$emit('ngRepeatFinished');
},0,false);
}
return data;
};
})
Ini akan $emitacara yang disebut ngRepeatFinishedsetiap kaling-repeat mendapat diberikan.
Bagaimana cara menggunakannya:
<li ng-repeat="item in (items|ngRepeatFinish) | filter:{name:namedFiltered}" >
The ngRepeatFinishkebutuhan Filter untuk diterapkan langsung ke Arrayatau Objectdidefinisikan dalam Anda$scope , Anda dapat menerapkan filter lain setelah.
Bagaimana TIDAK menggunakannya:
<li ng-repeat="item in (items | filter:{name:namedFiltered}) | ngRepeatFinish" >
Jangan menerapkan filter lain terlebih dahulu lalu menerapkan ngRepeatFinishfilter.
Kapan saya harus menggunakan ini?
Jika Anda ingin menerapkan gaya css tertentu ke DOM setelah daftar selesai render, karena Anda harus memperhitungkan dimensi baru elemen DOM yang telah dirender ulang oleh ng-repeat . (BTW: operasi semacam itu harus dilakukan di dalam arahan)
Apa yang TIDAK HARUS DILAKUKAN dalam fungsi yang menangani ngRepeatFinishedacara:
Jangan melakukan $scope.$applydalam fungsi itu atau Anda akan menempatkan Angular dalam loop tanpa akhir yang tidak dapat dideteksi oleh Angular.
Jangan menggunakannya untuk membuat perubahan di $scopeproperti, karena perubahan itu tidak akan tercermin dalam tampilan Anda sampai $digestloop berikutnya , dan karena Anda tidak dapat melakukan itu $scope.$applymereka tidak akan ada gunanya.
"Tapi filter tidak dimaksudkan untuk digunakan seperti itu !!"
Tidak, ini bukan hack, jika Anda tidak suka, jangan menggunakannya. Jika Anda tahu cara yang lebih baik untuk mencapai hal yang sama, mohon beri tahu saya.
Meringkas
Ini adalah retasan , dan menggunakannya dengan cara yang salah berbahaya, gunakan hanya untuk menerapkan gaya setelah ng-repeatrendering selesai dan Anda seharusnya tidak memiliki masalah.
element.ready()potongan itu? Maksud saya .. apakah ini semacam plugin jQuery yang Anda miliki, atau haruskah dipicu ketika elemen sudah siap?