К сожалению, ngRepeat не дает то, что вы просите. ngRepeatStart/End - это только маркеры, где последовательность начинается/заканчивается, а не где начинается рендеринг. (Используется для таких вещей, как создание верхних и нижних колонтитулов из некоторых строк в наборе или, может быть, простая разбивка на страницы).
Реальная проблема с рендерингом заключается в том, что вы никогда не знаете, где вы на самом деле находитесь в цепочке рендеринга, когда вы в углу. Директива, подобная той, которую вы хотите, будет трудно/невозможна даже для создания. Когда Angular начинает рендеринг, он начинает «гулять» по DOM, глядя на каждый элемент/дочерний элемент и «компилируя» эти элементы по мере его появления. В любое время операции пересылки могут привести к запуску целой новой последовательности. Вы видите это много с помощью специальных директив типа элемента.
Угловые концы делают это за два прохода: скомпилируйте и соедините. Пока вы не дойдете до стадии ссылки, что вы даже можете мечтать о вычислении высоты элемента, потому что именно там объекты фактически добавляются в DOM. Но на этом этапе вы все еще в основном потоке (у JS есть только один), поэтому браузер, вероятно, еще не успел рассчитать его!
Мое предложение было бы изменить тактику. Используйте какое-то средство отладки и средство setImmediate, чтобы обработать цикл обработки, что он делает, а затем выполнить какие-либо из ваших обновлений проверки размера, требуемых в этот момент. Вы можете легко обнаружить, когда элемент нуждается в этом, с простой директивой - любая директива с ЛЮБОЙ функцией ссылки вообще будет иметь, что вызывается, когда элемент визуализируется.
Так что мои предложения является:
- Написать "iWasDrawn" директиву с простой функцией связи.
- В этой функции связи вызовите функцию «debounce» или «setImmediate» с помощью debounce - выберите ваш выбор, есть десятки.
- В этом обратном вызове сделайте свой расчет размера.
Это должно быть эффективно, оно должно работать, и это довольно просто.
Какое требование .. может быть, вам действительно не понадобится до-после рендера – harishr
@HarishR У меня есть список элементов и полоса прокрутки (с использованием jQuery perfect scrollbar). Прокрутка вверх в списке загружает больше предметов (вверх, а не вниз, как люди привыкли). После рендеринга сообщений я обновляю полосу прокрутки. Проблема в том, что полоса прокрутки остается в верхней части списка, а перемещается в середину. Эта проблема может быть решена без событий ngRepeat, но мне действительно нравится знать, какие опции ngRepeat дают, чтобы делать что-то после рендера. – Naor
см. Функции pre/post link: http: // stackoverflow.com/questions/18297208/post-link-vs-pre-link-in-angle-js-директивы –