$ location.path не работает

Когда пользователь вводит правильное имя пользователя и пароль, я хочу перенаправить в другое место. Но когда я использовал $location.path('dashboard') здесь, здесь был изменен URL-адрес браузера, но эта страница не была загружена. Обновляйте страницу я с помощью ctrl + R или щелкните значок обновления браузера, после чего загрузится соответствующая страница.

$http.post('/login', $scope.userInfo)
        .success(function (data) {
            //Check if the authentication was a success or a failure
            //Successful POST here does not indicate success of authentication
            if (data.status === "authentication success") {

                //Proceed to load the dashboard for the user                    
                $location.path('/dashboard');

            } else if (data.status === "authentication error") {
                //Inform user of the error
                $scope.errorMessage = data.error;
                $scope.showErrorMessage = true;
            }

        })
        .error(function (error) {
            $scope.errorMessage = "Error while attempting to authenticate. Check  log.";
            $scope.showErrorMessage = true;

        });
    };

}]);

Ответ 1

Пробовали ли вы использовать $scope. $apply после этого? например:

if(!$scope.$$phase) $scope.$apply()

Этот короткий метод очень часто используется:

https://github.com/yearofmoo/AngularJS-Scope.SafeApply

Ответ 2

Чтобы процитировать https://docs.angularjs.org/guide/$location

"Служба $location позволяет вам изменять только URL-адрес, это не позволяет перезагружать страницу. Когда вам нужно изменить URL-адрес и перезагрузить страницу или перейти на другую страницу, используйте API нижнего уровня, $window.location.href."

Так, например, вместо использования: $location.path("/path/to/something");

Используйте это: $window.location.href = "/path/to/something";

$window.location.href изменит URL И, загрузив новую страницу.

Надеюсь, что это поможет.

Ответ 3

Если у вас нет      $scope (например, при обслуживании) то вы можете использовать

 $location.path('/path');
 if (!$rootScope.$$phase) $rootScope.$apply();

Ответ 4

Попробуйте это (не забудьте ввести $timeout):

$timeout(function () {
   $location.path('/dashboard'); 
}, 0);

Ответ 5

Использовать $timeout (function) {}, это будет работать

Ответ 6

Используйте $rootScope.$evalAsync

например:

$rootScope.$evalAsync(function() {
     $location.path('/dashboard'); 
});

Ответ 7

Попробуйте:

 $location.path('/dashboard');
 $location.reload();