Как мне показать экран загрузки при изменении маршрута в Angular 2?
html
css
angular
angular2-routing
Лукас
источник
источник
Ответы:
Текущий маршрутизатор Angular предоставляет события навигации. Вы можете подписаться на них и внести соответствующие изменения в пользовательский интерфейс. Не забывайте учитывать другие события, такие как
NavigationCancel
иNavigationError
останавливать счетчик в случае сбоя переходов маршрутизатора.app.component.ts - ваш корневой компонент
app.component.html - ваше корневое представление
Улучшение производительности Ответ : Если вы заботитесь о производительности, есть метод получше, его немного утомительнее реализовать, но улучшение производительности будет стоить дополнительных усилий. Вместо использования
*ngIf
для условного отображения счетчика мы могли бы использовать AngularNgZone
иRenderer
включать / выключать счетчик, который будет обходить обнаружение изменений Angular, когда мы меняем состояние счетчика. Я нашел это, чтобы сделать анимацию более плавной по сравнению с использованием трубки*ngIf
илиasync
трубки.Это похоже на мой предыдущий ответ с некоторыми изменениями:
app.component.ts - ваш корневой компонент
app.component.html - ваше корневое представление
источник
router navigation
и ,it triggering the spinner
а затем не в состоянии остановить его.navigationInterceptor
кажется решением, но я не уверен, что что-то еще ждет, чтобы сломаться.async requests
Я думаю, если смешать с этим, это снова вызовет проблему.display
либоnone
илиinline
.'md-spinner' is not a known element:
. Я новичок в Angular. Подскажите, пожалуйста, в чем может быть ошибка?ОБНОВЛЕНИЕ: 3 Теперь, когда я обновился до нового маршрутизатора, подход @borislemke не будет работать, если вы используете
CanDeactivate
охранник. Я унижаюсь до своего старого метода,ie:
этот ответUPDATE2 : события в маршрутизатор нового маршрутизатора выглядит многообещающим и ответ на @borislemke , кажется, охватывает основной аспект реализации вращателя я havent't тестировал , но я рекомендую его.
ОБНОВЛЕНИЕ1: я написал этот ответ в эпоху
Old-Router
, когда раньше было только одно событие,route-changed
о котором сообщалось черезrouter.subscribe()
. Я также почувствовал перегрузку приведенного ниже подхода и попытался сделать это, используя толькоrouter.subscribe()
, но это привело к обратным результатам, потому что не было возможности обнаружитьcanceled navigation
. Поэтому мне пришлось вернуться к длительному подходу (двойной работе).Если вы разбираетесь в Angular2, это то, что вам нужно
Boot.ts
Корневой компонент- (MyApp)
Spinner-Component (подпишется на Spinner-service, чтобы соответственно изменить значение active)
Spinner-Service (загрузите эту службу)
Определите наблюдаемый объект, на который будет подписан компонент-прядильщик, чтобы изменить статус при изменении, и функцию, чтобы узнать и установить активный / неактивный прядильщик.
Компоненты всех остальных маршрутов
(образец):
источник
spinner-service
вам просто нужны другие части, чтобы он работал. И помните, что это дляangular2-rc-1
Почему бы просто не использовать простой CSS:
И в ваших стилях:
Или даже мы можем сделать это для первого ответа:
А потом просто
Уловка здесь в том, что новые маршруты и компоненты всегда будут появляться после router-выхода , поэтому с помощью простого селектора css мы можем показать и скрыть загрузку.
источник
Если у вас есть специальная логика, необходимая только для первого маршрута, вы можете сделать следующее:
AppComponent
Мне нужно было это скрыть нижний колонтитул моей страницы, который в противном случае появлялся бы вверху страницы. Также, если вам нужен загрузчик только для первой страницы, вы можете использовать это.
источник
Вы также можете использовать это существующее решение . Демо здесь . Похоже на полосу загрузки YouTube. Я просто нашел его и добавил в свой проект.
источник