Я обнаружил нежелательное, по крайней мере для меня, поведение при изменении маршрута. На шаге 11 учебника http://angular.github.io/angular-phonecat/step-11/app/#/phones вы можете увидеть список телефонов. Если вы прокрутите вниз и нажмете на одну из последних, вы увидите, что прокрутка не сверху, а скорее посередине.
Я также нашел это в одном из своих приложений, и мне было интересно, как я могу получить это, чтобы прокрутить вверх. Я могу сделать это вручную, но я думаю, что должен быть другой элегантный способ сделать это, которого я не знаю.
Итак, есть ли элегантный способ прокрутки вверх при изменении маршрута?
источник
<div class="ng-view" autoscroll></div>
и он будет работать точно так же (если вы не хотите сделать прокрутку условной).$window.scrollTo(0,0)
прослушиватель событий $ stateChangeSuccessПросто поместите этот код для запуска
источник
$window.scrollTop(0,0)
работает лучше для меня, чем автопрокрутка. В моем случае у меня есть представления, которые входят и выходят с переходами.Этот код отлично сработал для меня ... Надеюсь, он также сработает для вас ... Все, что вам нужно сделать, это просто вставить $ anchorScroll в ваш блок выполнения и применить функцию слушателя к rootScope, как я делал в следующем примере ...
Вот порядок вызова модуля Angularjs:
app.config()
app.run()
directive's compile functions (if they are found in the dom)
app.controller()
directive's link functions (again, if found)
RUN BLOCK выполняется после создания инжектора и используется для запуска приложения. Это означает, что при перенаправлении на новый вид маршрута слушатель в блоке run вызывает
и теперь вы можете видеть, что прокрутка начинается сверху с новым перенаправленным видом :)
источник
Через час или два попытки все комбинации
ui-view autoscroll=true
,$stateChangeStart
,$locationChangeStart
,$uiViewScrollProvider.useAnchorScroll()
,$provide('$uiViewScroll', ...)
, и многие другие, я не мог получить свиток-вверх-на-новой-странице для работы , как и ожидалось.Это было в конечном итоге то, что работало для меня. Он захватывает pushState и replaceState и обновляет позицию прокрутки только при переходе к новым страницам (кнопка «назад / вперед» сохраняет свои позиции прокрутки):
источник
$locationProvider.html5Mode(true);
@wkronkel, есть ли способ сделать это, если вы не используете режим HTML5 в угловом режиме? Причина перезагрузки страницы выдает 404 ошибки из-за активного режима HTML 5.run
? угловой вашapp
объект?run
функция - это метод, доступный для каждого объекта углового модуля.Вот мое (на первый взгляд) надежное, полное и (довольно) краткое решение. Он использует стиль, совместимый с минификацией (и доступ angular.module (NAME) к вашему модулю).
PS Я обнаружил, что функция автопрокрутки не имеет никакого эффекта, независимо от того, установлено ли значение true или false.
источник
Используя Angularjs UI Router, я делаю так:
С участием:
Это никогда не терпит неудачу на любой странице, и это не глобально.
источник
onEnter: scrollContent
// Your favorite scroll method here
?$('html, body').animate({ scrollTop: -10000 }, 100);
onEnter: scrollContent
на каждом виде, он работает только на первом виде / маршруте, а не на втором. Странный.FYI для тех, кто сталкивается с проблемой, описанной в названии (как я сделал), кто также использует плагин AngularUI Router ...
Как было задано и получено в ответе на этот вопрос, маршрутизатор angular-ui переходит к нижней части страницы при изменении маршрутов.
Не можете понять, почему страница загружается внизу? Автопрокрутка углового UI-Router Выпуск
Однако, как говорится в ответе, вы можете отключить это поведение, сказав
autoscroll="false"
на своемui-view
.Например:
http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.directive:ui-view
источник
Вы можете использовать этот JavaScript
источник
$location.hash('top')
до$anchorScroll()
по умолчанию вперед / назад , больше не кнопки браузера работы; они продолжают перенаправлять вас на хеш в URLЕсли вы используете UI-роутер, вы можете использовать (на ходу)
источник
Я нашел это решение. Если вы перейдете в новый вид, функция будет выполнена.
источник
Установка автопрокрутки в true не для меня, поэтому я выбрал другое решение. Я создал сервис, который перехватывает каждый раз при изменении маршрута и использует встроенный сервис $ anchorScroll для прокрутки вверх. Работает для меня :-).
Обслуживание:
Постановка на учет:
источник
Немного опоздал на вечеринку, но я перепробовал все возможные способы, и ничего не получалось правильно. Вот мое элегантное решение:
Я использую контроллер, который управляет всеми моими страницами с помощью ui-router. Это позволяет мне перенаправлять пользователей, которые не прошли аутентификацию или проверку, в соответствующее местоположение. Большинство людей помещают свое промежуточное ПО в конфигурацию своего приложения, но мне потребовались некоторые http-запросы, поэтому глобальный контроллер работает лучше для меня.
Мой index.html выглядит так:
Мой initCtrl.js выглядит так:
Я перепробовал все возможные варианты, этот метод работает лучше всего.
источник
id="top-nav"
было важно поместить правильный элемент.Все ответы выше нарушают ожидаемое поведение браузера. Большинство людей хотят, чтобы они прокручивались вверх, если это «новая» страница, но возвращались на предыдущую позицию, если вы попадаете туда с помощью кнопки «Назад» (или «Вперед»).
Если вы предполагаете режим HTML5, это оказывается легким (хотя я уверен, что некоторые яркие люди могут придумать, как сделать это более элегантным!):
Это работает так, что маршрутизатор предполагает прокрутку вверх, но немного задерживается, чтобы дать браузеру возможность завершить работу. Если браузер затем уведомляет нас о том, что изменение произошло из-за навигации назад / вперед, он отменяет тайм-аут, и прокрутка никогда не происходит.
Я использовал необработанные
document
команды для прокрутки, потому что я хочу перейти ко всей верхней части окна. Если вы просто хотите, чтобы вашui-view
прокручивал, то установите,autoscroll="my_var"
где вы управляете,my_var
используя методы выше. Но я думаю, что большинство людей захотят прокрутить всю страницу, если вы переходите на страницу как «новую».Выше использует Ui-маршрутизатор, хотя вы можете использовать нг-маршрут вместо путем замены
$routeChangeSuccess
на$stateChangeSuccess
.источник
var routerApp = angular.module('routerApp', ['ui.router']); routerApp.config(function($stateProvider, $urlRouterProvider, $locationProvider) { $urlRouterProvider.otherwise('/home'); $locationProvider.html5Mode(false).hashPrefix(""); $stateProvider // HOME STATES AND NESTED VIEWS ======================================== .state('home', { url: '/home', templateUrl: 'partial-home.html' }) });
.state('web', { url: '/webdev', templateUrl: 'partial-web.html', controller: function($scope) { $scope.clients = ['client1', 'client2', 'client3']; // I put it here } })
Я просто изучаю этот материал, может быть, я что-то упускаю: DНи один из предоставленных ответов не решил мою проблему. Я использую анимацию между представлениями, и прокрутка всегда происходит после анимации. Решение, которое я нашел, чтобы прокрутка к вершине происходила до анимации, была следующей директивой:
Я вставил это на мой взгляд следующим образом:
источник
Простое решение, добавьте
scrollPositionRestoration
в основной маршрут включенный модуль.Как это:
источник
Попробуйте это http://ionicframework.com/docs/api/service/ $ ionicScrollDelegate /
Это прокрутить до верхней части списка scrollTop ()
источник
Я наконец получил то, что мне было нужно.
Мне нужно было прокрутить вверх, но хотелось, чтобы некоторые переходы не
Вы можете управлять этим на уровне маршрута за маршрутом.
Я объединяю вышеупомянутое решение с помощью @wkonkel и добавляю простой
noScroll: true
параметр в некоторые объявления маршрутов. Тогда я ловлю это в переходе.В целом: This поплавков в верхней части страницы на новых переходах, не всплывают на вершину на
Forward
/Back
переходов, и это позволяет переопределить это поведение , если это необходимо.Код: (предыдущее решение плюс дополнительная опция noScroll)
Поместите это в свой
app.run
блок и введите$state
...myApp.run(function($state){...})
Затем, если вы не хотите прокручивать страницу вверх, создайте маршрут следующим образом:
источник
Это сработало для меня, включая автопрокрутку
<div class="ngView" autoscroll="true" >
источник