resolve
Свойство $routeProvider
позволяет выполнять некоторые задания перед отображением соответствующего представления.
Что делать, если я хочу отображать счетчик, пока эти задания выполняются, чтобы увеличить пользовательский интерфейс?
В самом деле, в противном случае пользователь почувствовал бы, что приложение заблокировано, так как в течение нескольких миллисекунд > 600 не отображались элементы представления.
Конечно, был способ определить глобальный элемент div
из текущего представления для отображения, чтобы отобразить счетчик благодаря функции $scope.$rootChangeStart
.
Но я не хочу скрывать всю страницу с плохим поворотником посередине.
Я хочу, чтобы некоторые страницы моего веб-браузера отличались относительно способа отображения загрузки.
Я наткнулся на этот интересный пост, содержащий точный номер, который я описал выше:
Этот подход приводит к ужасному опыту пользовательского интерфейса. Пользователь нажимает кнопку, чтобы обновить список или что-то еще, и весь экран получает заполненном в родовом счетчике, потому что библиотека не имеет способа показывающий прядильщик только для вида (ов), на которые действительно влияет изменение состояния. Нет благодарности.
В любом случае, после того, как я подал эту проблему, я понял, что "решение" функция - анти-шаблон. Он ожидает, что все promises будут разрешены затем оживляет изменение состояния. Это совершенно неправильно - вы хотите ваши анимации перехода между состояниями для параллельной работы с вашими данными нагрузок, так что последний может быть закрыт первым.
Например, представьте, что у вас есть список элементов, и нажмите на один из они скрывают список и показывают детали элемента в другом представлении. Если у нас есть асинхронная нагрузка для деталей элемента, которая, в среднем, 400 мс, то в большинстве случаев мы можем полностью покрыть нагрузку имея 300 мс анимацию "оставить" в представлении списка и 300 мс "enter"анимация на представлении деталей элемента. Таким образом, мы обеспечиваем ощущение скольжения к пользовательскому интерфейсу, и в большинстве случаев можно избежать показаний счетчика.
Однако для этого требуется, чтобы мы инициировали асинхронную нагрузку и состояние изменить анимацию в тот же момент. Если мы используем "разрешение", вся асинхронная анимация происходит до начала анимации. Пользователь клики, видит прядильщик, затем видит переходную анимацию. Целый изменение состояния займет ~ 1000 мс, что слишком медленно.
"Разрешить" может быть полезным способом кэширования зависимостей между разные варианты, если у него была возможность не ждать на promises, но текущее поведение, всегда разрешая их до изменения состояния запуск делает его почти бесполезным, ИМО. Его следует избегать для любого зависимых, которые включают асинхронные нагрузки.
Должен ли я действительно прекратить использование resolve
для загрузки некоторых данных и, скорее, начать загрузку их в соответствующий контроллер напрямую? Так что я могу обновить соответствующее представление до тех пор, пока выполняется задание и в том месте, которое я хочу в представлении, а не глобально.