wake-up-neo.com

In Angular wird beschrieben, wie mit $ location.path als $ http.post success callback umgeleitet wird

Ich versuche, einen einfachen Authentifizierungsdienst zu erstellen, indem ich eine Post an eine PHP-Datei schicke. Ich brauche sie, um die Homepage auf meinem ng-view zu laden, wenn sie erfolgreich ist.

Das habe ich versucht:

function loginCtrl($scope, $http, $location){
    $http.post(url,data).success(function(data){
        $location.path('/home');
    });
}

Führt dazu, dass sich meine URL ändert, ng-view jedoch nicht aktualisiert wird. Sie wird aktualisiert, wenn Sie die Seite manuell aktualisieren.

(Routen wurden am $routeProvider richtig konfiguriert, ich habe das Umleiten mit einer Standalone-Funktion getestet, nicht als Rückruf und es funktioniert)

Ich habe auch versucht, $location.path('/home') als Funktion zu definieren und dann beim Callback aufzurufen, dass es immer noch nicht funktioniert.

Ich recherchierte und fand einige Artikel, die besagten, dass dies geschieht, wenn ein anderes Plugin eines Drittanbieters verwendet wird. Ich lade nur eckige.js

Jegliche Einsichten oder Hinweise auf Studienmaterial werden großartig sein

71

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();
  }
};
82
Mark Nadig

Im offiziellen Leitfaden gibt es eine einfache Antwort:

Was macht es nicht?

Wenn die Browser-URL geändert wird, führt dies nicht zu einem vollständigen Neuladen der Seite. Um die Seite nach dem Ändern der URL erneut zu laden, verwenden Sie die untergeordnete API $ window.location.href.

Quelle: https://docs.angularjs.org/guide/$location

14
0x6B6F77616C74

Ich mache unten die Seitenumleitung (vom Login zur Startseite). Ich muss das Benutzerobjekt auch an die Homepage übergeben. also verwende 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 für mich funktioniert.

3
user2230867

Anstatt success zu verwenden, ändere ich es in then 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';
            }
        });
    };
});
2
jcguo

Verwenden Sie: $ window.location.href = '/Home.html';

1
user2136053

es ist sehr einfach Code .. aber schwer zu finden .. 

detailsApp.controller("SchoolCtrl", function ($scope, $location) { 
      $scope.addSchool = function () {

        location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
      }
});
0