In Angolare, come reindirizzare con $posizione.percorso come $http.post callback di successo

Sto tentando di fare un semplice servizio di autenticazione mediante l’invio di un Post in un file php, ho bisogno di caricare la home page parziale sul mio ng-view quando il suo successo.

Questo è quello che ho provato :

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

Risultati nel mio url cambiare ma ng-view non l’aggiornamento. Aggiorna quando ho aggiornare manualmente la pagina.

(i percorsi sono stati configurati correttamente, alla $routeProvider, ho testato il reindirizzamento con funzione autonoma, non come un callback e funziona )

Ho provato anche la definizione di $location.path('/home') come una funzione e quindi la chiamata su richiamata, ma non funziona ancora.

Ho fatto qualche ricerca e ho trovato alcuni articoli che indica questo accade quando si utilizza un altro plugin di terze parti, io sono solo il caricamento angular.js

Intuizioni o riferimenti ad alcuni materiali di studio sarà grande

  • che cosa si intende per ng vista? inoltre, $posizione.path() chiamare internamente finestra.posizione = …?
  • Ho dimenticato di menzionare questo contesto di utilizzo di framework angularjs. – modificato il sopra
  • Interessante! Si usa firebug o qualcosa di simile? Non la tua app per effettuare una richiesta per una parziale, quando un percorso è cambiato?
  • Provare a chiamare $rootScope.$apply() dopo l’ $posizione.path(‘/home’).
  • sì, lo fa .when('/home', {templateUrl:'partials/home.html',controller: myCtrl}). sto usando chrome developer tools, e non mostra una richiesta di home.html.
  • cerchiamo di fare un esito negativo della richiesta e quindi modificare il percorso in caso di errore di callback. qualcosa di simile: $http.post('\itdoesnotexist',data).error(function($location.path('/home');}); parziale sarebbe scaricato?
  • btw, hai visto questo thread: stackoverflow.com/questions/11784656/…? scommetto che i “sì”, ma solo nel caso in.
  • vi aspetto e provare il test al più presto

 

6 Replies
  1. 82

    Qui è il changeLocation esempio da questo articolo 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();
      }
    };
    • Probabilmente si dovrebbe usare $la finestra di servizio, anziché utilizzare direttamente l’oggetto finestra per evitare problemi in fase di test. code.angularjs.org/1.1.5/docs/api/ng.$finestra
    • Un unica funzione di risposta: Usa $la finestra.posizione = url;
    • ho anche scritto un separato indietro storia stack
    • app.direttiva(“backButton”, function ($finestra) { return { limita: “A”, link: funzione (campo di applicazione, elem, attrs) { elem.bind(“click”, function () { $finestra.storia.indietro(); }); } }; });
  2. 3

    Sto facendo sotto per la pagina di reindirizzamento(dall’accesso all’home page). Devo passare l’oggetto utente anche per la home page. così, sto usando 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.');      
        });

    E ha funzionato per me.

  3. 2

    Invece di utilizzare success, cambio a then e funziona.

    ecco il codice:

    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';
                }
            });
        };
    });
  4. 0

    è molto semplice codice .. ma è difficile multato..

    detailsApp.controller("SchoolCtrl", function ($scope, $location) { 
          $scope.addSchool = function () {
    
            location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
          }
    });

Lascia un commento