Bugüne kadar verilmiş cevaplar sadece ilk kez çalışacak ng-repeat
hale alır , ancak bir dinamik varsa ng-repeat
öğeleri filtreleme / ekleme / silme olacak yani ve sen her zaman olduğu bildirilir gerekmektedir ng-repeat
render 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 $filter
Sepetinde 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 .ngRepeatFinished
ng-repeat
Bu nasıl kullanılır:
<li ng-repeat="item in (items|ngRepeatFinish) | filter:{name:namedFiltered}" >
ngRepeatFinish
Filtre ihtiyaçları bir doğrudan uygulanacak Array
veya Object
tanı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 ngRepeatFinish
filtreyi 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)
ngRepeatFinished
Olayı işleyen işlevde YAPILMAMASI GEREKENLER :
$scope.$apply
Bu 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 $digest
döngüye kadar görünümünüze yansıtılmaz ve gerçekleştiremediğiniz için $scope.$apply
herhangi 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-repeat
render 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?