Bugüne kadar verilmiş cevaplar sadece ilk kez çalışacak ng-repeathale alır , ancak bir dinamik varsa ng-repeatöğeleri filtreleme / ekleme / silme olacak yani ve sen her zaman olduğu bildirilir gerekmektedir ng-repeatrender olur, bu çözümler sizin için işe yaramaz.
Yani, HER ZAMAN,ng-repeat sadece ilk kez değil , yeniden oluşturulduğu konusunda bilgilendirilmeniz gerekiyorsa , bunu yapmanın bir yolunu buldum, oldukça 'çirkin', ama ne olduğunuzu biliyorsanız iyi çalışır yapıyor. Bunu kullanın $filterSepetinde ng-repeat başka kullanmadan önce$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;
};
})
Bu işlem, her oluşturulduğunda $emitçağrılacak bir etkinlik olacaktır .ngRepeatFinishedng-repeat
Bu nasıl kullanılır:
<li ng-repeat="item in (items|ngRepeatFinish) | filter:{name:namedFiltered}" >
ngRepeatFinishFiltre ihtiyaçları bir doğrudan uygulanacak Arrayveya Objecttanımlanan senin$scope , sen sonra diğer filtreler de uygulayabilirsiniz.
Nasıl KULLANILMAZ:
<li ng-repeat="item in (items | filter:{name:namedFiltered}) | ngRepeatFinish" >
Önce diğer filtreleri, ardından ngRepeatFinishfiltreyi uygulamayın .
Bunu ne zaman kullanmalıyım?
Liste oluşturulduktan sonra belirli css stillerini DOM'a uygulamak istiyorsanız, çünkü DOM öğelerinin yeniden oluşturulmuş yeni DOM öğelerinin boyutlarını ng-repeat . (BTW: bu tür işlemler bir direktif dahilinde yapılmalıdır)
ngRepeatFinishedOlayı işleyen işlevde YAPILMAMASI GEREKENLER :
$scope.$applyBu işlevde bir işlem yapmayın, yoksa Angular'ı Angular'ın algılayamayacağı sonsuz bir döngüye koyacaksınız.
Bunu $scopeözelliklerde değişiklik yapmak için kullanmayın , çünkü bu değişiklikler bir sonraki $digestdöngüye kadar görünümünüze yansıtılmaz ve gerçekleştiremediğiniz için $scope.$applyherhangi bir faydası olmaz.
"Ancak filtreler bu şekilde kullanılmaz!"
Hayır, değiller, bu bir hack, eğer beğenmezseniz kullanmayın. Aynı şeyi başarmanın daha iyi bir yolunu biliyorsanız lütfen bana bildirin.
Özetleme
Bu bir hack'tir ve yanlış şekilde kullanmak tehlikelidir, bunu yalnızca ng-repeatrender işlemi bittikten sonra stil uygulamak için kullanın ve herhangi bir sorun yaşamamalısınız.
element.ready()pasajın amacı nedir? Yani .. sahip olduğunuz bir çeşit jQuery eklentisi mi yoksa eleman hazır olduğunda tetiklenmeli mi?