Autoscroll to TOP с ui-маршрутизатором и Angularjs
Я прочитал так много разных проблем с этим, и ни одно из приведенных решений, похоже, не соответствует моему варианту использования. Я начал с простого размещения target= "_top" на всех моих ссылках, но это фактически заставляет мое приложение перезагружаться, которое не будет работать. Я также видел, как люди говорят, что они используют autoscroll= "true" но это только кажется, работает, если его в моей ui-view.
проблема с этим заключается в том, что в моем индексе.html-файл я исправил nav и другие статические элементы, которые являются выше моего первого пользовательского интерфейса. Это означает, что когда я перехожу на другие страницы, я теряю навигацию, поскольку страница загружается мимо этих элементов. Я также попытался положить это на тело с помощью:
<body autoscroll="true">
</body>
Это, кажется, тоже ничего не делает. Итак, вопрос в том, как я могу убедиться, что новые страницы (новые изменения маршрута от ui-router) приводят к запуску в верхней части страницы? Спасибо!
7 ответов:
Если вы хотите, чтобы он всегда прокручивался до 0 кросс-браузера, ничего не делайте с автопрокруткой. Просто поместите этот блок запуска:
$rootScope.$on('$stateChangeSuccess', function() { document.body.scrollTop = document.documentElement.scrollTop = 0; });
у меня была точно такая же проблема, исправлена navbar при изменении маршрута, загрузка страницы частично прокручивалась вниз по странице.
Я только что добавил
autoscroll="false"доui-view, например:<div ui-view="main" autoscroll="false"></div>edit
только что протестировал этот метод, немного грязный хак, но он работает. Импорт угловых услуг
$anchorScroll&$locationв соответствующие контроллеры для ui-router.stateconfig. Затем используйте$watchна ui-router$stateParamsназывать$location.hash('top');на маршрут/государство изменения.https://docs.angularjs.org/api/ng/service/ $anchorScroll
https://docs.angularjs.org/api/ng/service/ $location#hash
.controller('myCtrl', function ($location, $anchorScroll, $scope, $stateParams) { $scope.$watchCollection('$stateParams', function() { $location.hash('top'); $anchorScroll(); }); });
при использовании версии 1.0.6 на
$stateChangeSuccessсобытие устарело в пользу$transitionsсервис. Вот код, который я использовал для прокрутки вверх при каждом изменении состояния:app.run(['$transitions', function ($transitions) { $transitions.onSuccess({}, function () { document.body.scrollTop = document.documentElement.scrollTop = 0; }) }]);
Я использую ui-маршрутизатор. Мой бег выглядел так:
.run(function($rootScope, $state, $stateParams){ $rootScope.$state = $state; $rootScope.$stateParams = $stateParams; $rootScope.$on('$stateChangeSuccess', function() { document.body.scrollTop = document.documentElement.scrollTop = 0; }); })
есть угловой сервис для этого. https://docs.angularjs.org/api/ng/service/$anchorScroll
Пример Кода:
.run(function ($rootScope, $state, $stateParams, $anchorScroll) { $rootScope.$on('$stateChangeStart', function () { $anchorScroll(); }); });Если вы хотите перейти к определенному элементу
.run(function ($rootScope, $state, $stateParams, $anchorScroll) { $rootScope.$on('$stateChangeStart', function () { // set the location.hash to the id of // the element you wish to scroll to. $location.hash('bottom'); // call $anchorScroll() $anchorScroll(); }); });
Я должен был сделать комбинацию из двух других ответов.
<div ui-view autoscroll="false"></div>в сочетании с
$rootScope.$on('$stateChangeSuccess', function() { document.body.scrollTop = 0; document.documentElement.scrollTop = 0; });Примечание: это на v0.2. 15 ui-router
сделал то же самое, что и исключенный ответ от @TaylorMac, но в $locationChangeStart.
.бежать.js:$rootScope.$on('$locationChangeStart', function() { document.body.scrollTop = document.documentElement.scrollTop = 0; });
Comments