Угловой якорный свиток без обещания
Я пытаюсь использовать очень простой scrollTo в Angular 1.x. У меня есть ссылка меню навигации, которая при нажатии должна перейти к div # id. Я могу заставить это работать только с "обещанием".
Например, это работает:
<li><a href="#" ng-click="tracking()">Go to Tracking</a></li>
$scope.tracking = function() { // go to tracking when header button is clicked
$http.get('/includes/modules/get_home_destinations.php')
.then(function(reply){
if (reply.data) {
$scope.destinations = reply.data;
$location.hash('home-tracking');
}
});
};
Но это не отвечает:
$scope.tracking = function() { // go to tracking when header button is clicked
$location.hash('home-tracking');
};
Это как если бы обещание требовалось, но заставить его работать простым щелчком мыши без обещания?
2 ответа
Решение
Это из-за href="#", как я думаю. Поскольку во-первых, href перенаправляет страницу на "#", тогда обещание выполняется с задержкой по времени и перенаправляет обратную страницу в нужное место. Но без обещаний нет временной задержки, код выполняется немедленно, и href перенаправляет страницу на "#" и страница застревает там.
Надеюсь, что приведенный ниже код будет полезным:
в HTML-файл
<div id="home-tracking">
<h1>Home Traking Content</h1>
</div>
<a ng-click="tracking()">Go to Tracking</a>
в файле контроллера
angular.module('trackingApp').controller('TrackingCtrl', function($location, $anchorScroll) {
$scope.tracking = function() {
$location.hash('home-tracking');
$anchorScroll();
}
})