Відповіді , які були дані до сих пір працює тільки в перший раз , що 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, який у вас є, або його слід запускати, коли елемент готовий?