С по умолчанию ng-route
вы можете определить resolve
свойства. Значения этих свойств должны быть разрешены (получены с сервера) до изменения местоположения. Это предотвратит отображение любого представления до его инициализации.
См. Этот пример plunker.
Тяжелых предложения вида
Угловые не имеют никакого механизма, который будет встроенной команды уведомления, когда DOM закончил рендеринг. Тем не менее, вы можете поставить в очередь определенный код, который будет выполняться всякий раз, когда цикл дайджеста будет завершен.
// Execute a function at the end of the current digest queue.
$timeout(function() {
// Do your thing here
$rootScope.displayView = true;
}, 0);
Другой подход, чтобы все ng-repeats
сообщить вам, когда последняя запись была добавлена в DOM. Обратите внимание, что если у вас есть несколько ng-repeats
в представлении, вам понадобится какой-то механизм для отслеживания их всех (обещания - ваш друг).
app.directive('postRepeat', function() {
return function(scope, element, attrs) {
// The ng-repeat directive sets the $last property on the scope to
// true when processing the last item.
if (scope.$last){
$rootScope.displayView = true;
}
};
});
Хммм ... Тогда, если мне нужно загрузить большое количество данных, вы рекомендуем загрузить его в функцию разрешения, чтобы он был готов для контроллера, отображает представление. Но ... Что произойдет, если представление слишком тяжелое (например: есть много ng-repeat)? Я имею в виду, есть ли событие, которое может быть запущено при визуализации представления? Я полагаю, что не все работает внутри реактивного цикла – Serginho
@Serginho: вы больше не загружаете данные, чем вы собираетесь загружать, - разрешите, чтобы они были загружены до изменения маршрута, чтобы предотвратить все эти неприятные DOM поппинг. Обратите внимание, что каждый маршрут может иметь собственное свойство разрешения (и срабатывает только при запуске соответствующего маршрута). – null
@ Сержиньо: Если само представление по-прежнему тяжело загружено, то одного решения может быть недостаточно. Зацикливание с помощью элементов zmin-repeat всегда будет медленным, поскольку javascript является одиночным. Если вы действительно не можете сегментировать представление лучше (меньше ng-repeat), вы все равно можете скрыть представление до завершения сборки DOM. Но браузер будет заморожен на время, и вам понадобится код, который будет уведомлять, когда сборка была сделана, поскольку угловые ничего не предоставляют для этого. Я уточню ответ с некоторыми предложениями. – null