Ответ 1
Пробовали ли вы использовать $scope. $apply после этого? например:
if(!$scope.$$phase) $scope.$apply()
Этот короткий метод очень часто используется:
Когда пользователь вводит правильное имя пользователя и пароль, я хочу перенаправить в другое место. Но когда я использовал $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;
});
};
}]);
Пробовали ли вы использовать $scope. $apply после этого? например:
if(!$scope.$$phase) $scope.$apply()
Этот короткий метод очень часто используется:
Чтобы процитировать 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 И, загрузив новую страницу.
Надеюсь, что это поможет.
Если у вас нет $scope (например, при обслуживании) то вы можете использовать
$location.path('/path');
if (!$rootScope.$$phase) $rootScope.$apply();
Попробуйте это (не забудьте ввести $timeout):
$timeout(function () {
$location.path('/dashboard');
}, 0);
Использовать $timeout (function) {}, это будет работать
Используйте $rootScope.$evalAsync
например:
$rootScope.$evalAsync(function() {
$location.path('/dashboard');
});
Попробуйте:
$location.path('/dashboard');
$location.reload();