Відповіді , які були дані до сих пір працює тільки в перший раз , що ng-repeatвізуалізується , але якщо у вас є динаміка ng-repeat, а це означає , що ви збираєтеся додавати / видаляти / фільтрації елементів, і ви повинні бути повідомлені кожен раз, коли ng-repeatбуде винесено, ці рішення не працюватимуть для вас.
Отже, якщо вам потрібно буде повідомляти КОЖНЕ ЧАС про те, що оновлення буде ng-repeatповторно, і не тільки в перший раз, я знайшов спосіб це зробити, це досить "хакі", але це буде добре, якщо ви знаєте, що ви є робити. Використовуйте це $filterу своєму, ng-repeat перш ніж використовувати будь-яке інше$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;
};
})
Це буде $emitподія, яку називають ngRepeatFinishedкожного разу, коли ng-repeatотримуються.
Як ним користуватися:
<li ng-repeat="item in (items|ngRepeatFinish) | filter:{name:namedFiltered}" >
ngRepeatFinishФільтр повинен бути застосований безпосередньо до Arrayабо Objectвизначено в вашому $scope, ви можете застосувати інші фільтри після.
Як НЕ ним користуватися:
<li ng-repeat="item in (items | filter:{name:namedFiltered}) | ngRepeatFinish" >
Не застосовуйте спочатку інші фільтри, а потім застосуйте ngRepeatFinishфільтр.
Коли я повинен використовувати це?
Якщо ви хочете застосувати певні стилі css до DOM після завершення візуалізації списку, оскільки вам потрібно врахувати нові розміри елементів DOM, які були рендеровані ng-repeat. (BTW: такі операції слід робити в рамках директиви)
ЧОГО НЕ ДІЙТИ у функції, яка обробляє ngRepeatFinishedподію:
Не виконайте $scope.$applyфункції в цій функції, або ви поставите Angular у нескінченний цикл, який Angular не зможе виявити.
Не використовуйте його для внесення змін у $scopeвластивості, оскільки ці зміни не відображатимуться у вашому представленні до наступного $digestциклу, а оскільки ви не можете виконати, $scope.$applyвони не принесуть ніякої користі.
"Але фільтри не використовуються таким чином !!"
Ні, вони не є, це хак, якщо вам це не подобається, не використовуйте. Якщо ви знаєте кращий спосіб здійснити те саме, будь ласка, дайте мені це знати.
Узагальнення
Це злом , і використовувати його неправильним чином небезпечно, використовуйте його лише для застосування стилів після ng-repeatзавершення візуалізації, і у вас не повинно виникнути жодних проблем.
element.ready()фрагменту? Я маю на увазі .. це якийсь плагін jQuery, який у вас є, або його слід запускати, коли елемент готовий?