В Angular, как перенаправить с $location.path как обратный вызов успеха http.post
Я пытаюсь сделать простую службу проверки подлинности, отправив сообщение в 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
Любые идеи или указатели на некоторые учебные материалы будут отличными
Ответы
Ответ 1
Вот пример 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();
}
};
Ответ 2
В официальном руководстве есть простой ответ:
Что он не делает?
Это не приводит к полной перезагрузке страницы при изменении URL-адреса браузера. Чтобы перезагрузить страницу после изменения URL-адреса, используйте API нижнего уровня, $Window.location.href.
Источник: https://docs.angularjs.org/guide/$location
Ответ 3
Я делаю ниже для перенаправления страницы (от входа на домашнюю страницу). Я должен передать объект пользователя также на домашнюю страницу. поэтому я использую 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.');
});
И это сработало для меня.
Ответ 4
Вместо использования 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';
}
});
};
});
Ответ 5
Использование: $window.location.href= '/Home.html';
Ответ 6
это очень простой код.. но трудно оштрафовать..
detailsApp.controller("SchoolCtrl", function ($scope, $location) {
$scope.addSchool = function () {
location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
}
});