В Angular, как перенаправить с $location.путь как $http.обратный вызов после успеха
Я пытаюсь сделать простой сервис аутентификации, отправив сообщение в php-файл, мне нужно, чтобы он загрузил домашнюю страницу частично на мой ng-view
когда его успешным.
вот что я пробовал :
function loginCtrl($scope, $http, $location){
$http.post(url,data).success(function(data){
$location.path('/home');
});
}
приводит к изменению моего url, но ng-view
не обновляется. Он обновляется, когда я вручную обновить страницу.
(маршруты были настроены правильно в $routeProvider
, Я проверил перенаправление это с автономной функцией не как обратный вызов и это работает )
Я также попытался определить $location.path('/home')
как функция, а затем вызов его на обратный вызов он по-прежнему не работает.
я провел некоторое исследование и нашел некоторые статьи, в которых говорится, что это происходит при использовании другого стороннего плагина, я только загружаю angular.js
любые идеи или указатели на какой-то учебный материал будет здорово
6 ответов:
вот пример changeLocation из этой статьи http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase
//be sure to inject $scope and $location var changeLocation = function(url, forceReload) { $scope = $scope || angular.element(document).scope(); if(forceReload || $scope.$$phase) { window.location = url; } else { //only use this if you want to replace the history stack //$location.path(url).replace(); //this this if you want to change the URL and add it to the history stack $location.path(url); $scope.$apply(); } };
в официальном руководстве есть простой ответ:
что он не делает?
Это не вызывает полной перезагрузки страницы при изменении URL браузера. Чтобы перезагрузить страницу после изменения URL-адреса, используйте API нижнего уровня, $окно.местоположение.хреф.
Я делаю ниже для перенаправления страницы (от входа на главную страницу). Я должен передать объект пользователя на домашнюю страницу. Итак, я использую Windows localstorage.
$http({ url:'/login/user', method : 'POST', headers: { 'Content-Type': 'application/json' }, data: userData }).success(function(loginDetails){ $scope.updLoginDetails = loginDetails; if($scope.updLoginDetails.successful == true) { loginDetails.custId = $scope.updLoginDetails.customerDetails.cust_ID; loginDetails.userName = $scope.updLoginDetails.customerDetails.cust_NM; window.localStorage.setItem("loginDetails", JSON.stringify(loginDetails)); $window.location='/login/homepage'; } else alert('No access available.'); }).error(function(err,status){ alert('No access available.'); });
и это сработало для меня.
вместо
success
, Я меняю его наthen
и это работает.вот код:
lgrg.controller('login', function($scope, $window, $http) { $scope.loginUser = {}; $scope.submitForm = function() { $scope.errorInfo = null $http({ method : 'POST', url : '/login', headers : {'Content-Type': 'application/json'} data: $scope.loginUser }).then(function(data) { if (!data.status) { $scope.errorInfo = data.info } else { //page jump $window.location.href = '/admin'; } }); }; });