Ich versuche, einen einfachen Authentifizierungsdienst zu erstellen, indem ich einen Beitrag an eine PHP-Datei sende. Ich benötige ihn, um die Homepage teilweise auf meine zu laden, ng-view
wenn sie erfolgreich ist.
Folgendes habe ich versucht:
function loginCtrl($scope, $http, $location){
$http.post(url,data).success(function(data){
$location.path('/home');
});
}
Dies führt dazu, dass sich meine URL ändert, aber ng-view
nicht aktualisiert. Es wird aktualisiert, wenn ich die Seite manuell aktualisiere.
(Routen wurden am ordnungsgemäß konfiguriert $routeProvider
. Ich habe getestet, dies mit einer eigenständigen Funktion umzuleiten, die nicht als Rückruf dient, und es funktioniert.)
Ich habe auch versucht, $location.path('/home')
als Funktion zu definieren und sie dann beim Rückruf aufzurufen, es funktioniert immer noch nicht.
Ich habe einige Nachforschungen angestellt und einige Artikel gefunden, die besagen, dass dies passiert, wenn ein anderes Plugin eines Drittanbieters verwendet wird. Ich lade nur angle.js
Alle Einsichten oder Hinweise auf Studienmaterial sind großartig
quelle
Antworten:
Hier ist das changeLocation-Beispiel aus diesem Artikel 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(); } };
quelle
Es gibt eine einfache Antwort im offiziellen Leitfaden:
Quelle: https://docs.angularjs.org/guide/$location
quelle
Ich mache das Folgende für die Seitenumleitung (vom Login zur Homepage). Ich muss das Benutzerobjekt auch an die Homepage übergeben. Also benutze ich 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.'); });
Und es hat bei mir funktioniert.
quelle
Anstatt zu verwenden
success
, ändere ich es inthen
und es funktioniert.Hier ist der Code:
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'; } }); }; });
quelle
Verwenden Sie: $ window.location.href = '/Home.html';
quelle
Es ist sehr einfach Code .. aber schwer zu bestrafen ..
detailsApp.controller("SchoolCtrl", function ($scope, $location) { $scope.addSchool = function () { location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID; } });
quelle