У меня есть страница с некоторыми вкладками, и на каждой вкладке имеется большое количество привязок к угловому. Это - образец страницы, на которой я сталкиваюсь с проблемой. Каждая вкладка занимает около 10 секунд визуализировать.
Итак, я планировал дать загрузочный счетчик во время отображения вкладки.
Поэтому я планировал показать загрузочный счетчик во время щелчка по вкладке и удалить счетчик в конце ($last
) ng-repeat.
На вкладке ng-click на вкладке я активирован вращающийся загрузчик
<ul>
<li ng-repeat="tab in tabs"
ng-class="{active:isActiveTab(tab.url)}"
ng-click="onClickTab(tab)">{{tab.title}}
</li>
</ul>
В контроллере
$scope.onClickTab = function (tab) {
showLoader();
$scope.currentTab = tab.url;
}
Чтобы проверить, что ng-repeat завершено, я использовал ниже директиву
.directive('onFinishRender', function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true) {
$timeout(function () {
scope.$emit('ngRepeatFinished');
});
}
}
}
});
$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
removeLoader();
});
showLoader и removeLoader - это простая функция, которая добавляет и удаляет div, имеющий простой загрузчик.
function showLoader() {
$('body').append('<div class="loader"></div>');
}
function removeLoader() {
$('.loader').fadeOut(function () {
$(this).remove();
});
}
Ожидаемый результат: Спиннинг-загрузчик будет отображаться при нажатии на вкладку и появляться до тех пор, пока ng-repeat не завершится. (т.е. щелкнув вкладку полностью)
Фактический результат: загрузчик не отображается при нажатии на вкладку и появляется почти в конце ng-repaet и отображается в течение нескольких секунд. Здесь вы можете наблюдать указанное поведение. Я думаю, что страница не может показать spinner из-за процесса привязки angular, который заставляет замораживать страницу.
Может ли кто-нибудь помочь мне разрешить это?