Angular js preloader

179
09 октября 2018, 00:30

Как сделать прелоадер для ангуляра(роунтинг) который будет пропадать только после полной загрузки страницы ?

Answer 1

Гугля, я сразу наткнулся на очень простой модуль ngProgress http://victorbjelkholm.github.io/ngProgress/:

const app = angular.module('app', ['ngRoute', 'ngProgress']);
app.config(['$locationProvider', '$routeProvider', ($locationProvider, $routeProvider) => {
    $locationProvider.html5Mode(true);
    $routeProvider
        .when('/', {
            template: `
                <h1>Главная</h1>
                <a href="/">Главная</a>
                <a href="/blog">Блог</a>
            `
        })
        .when('/blog', {
            template: `
                <h1>Блог</h1>
                <a href="/">Главная</a>
                <a href="/blog">Блог</a>
            `
        })
        .otherwise({
            redirectTo: '/'
        });
}]);
app.run(['$rootScope', '$injector', ($rootScope, $injector) => {
    const ngProgress = $injector.get('ngProgressFactory').createInstance();
    $rootScope.$on('$routeChangeStart', () => { 
        ngProgress.start();
    });
    $rootScope.$on('$routeChangeSuccess', () => {
        ngProgress.stop();
    });
}]);

Пример с кастомным прелоадером, тут все намного проще:

app.run(['$rootScope', ($rootScope) => {
    $rootScope.$on('$routeChangeStart', () => { 
        $rootScope.loading = true;
    });
    $rootScope.$on('$routeChangeSuccess', () => {
        $rootScope.loading = false;
    });
}]);

В index.html:

<style>
    .spinner {
        position: absolute;
        // какие-то стили...
    }
</style>
<div class="spinner" ng-if="loading">
    <img src="/to-some-gif-spinner">
</div>
<div ng-view></div>

Но еще есть маленькая проблема - это быстрый роутинг, поэтому ваш спинер может и не отображаться, как вариант добавляем setTimeout:

app.run(['$rootScope', '$timeout', ($rootScope, $timeout) => {
    $rootScope.$on('$routeChangeStart', () => { 
        $rootScope.loading = true;
    });
    $rootScope.$on('$routeChangeSuccess', () => {
        $timeout(() => {
            $rootScope.loading = false;
        }, 500);
    });
}]);
READ ALSO
Как использовать Mobile SDK VK API?

Как использовать Mobile SDK VK API?

Прошу помочь разобраться с темой использования VK API в Direct Games вконтактеЕсть прототип игры и хотел разобраться с работой api

188
Вставить перенос строки в текст typescript

Вставить перенос строки в текст typescript

Есть приложение на Angular 6 в котором используется typescript соответственноЕсть кнопка копирования статистики из разных частей страницы

291
jQuery - менеджер, неполная загрузка диалога

jQuery - менеджер, неполная загрузка диалога

В своём менеджере я использую очень невыгодную загрузку списка сообщений

230
Не работает простой javascript в Chrome на Android 4.2 / 4.3

Не работает простой javascript в Chrome на Android 4.2 / 4.3

Есть форма (тест), содержащая несколько вопросов, на которые надо давать ответы путем выбора от 0 до 5 балловСделано радиокнопками:

168