Угловой якорный свиток без обещания

Я пытаюсь использовать очень простой 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();
    }
})
Другие вопросы по тегам