2016-11-24 3 views
1

Ich entwickle eine App und nach dem Login sollte der Benutzer von der Login-Seite auf die Homepage umgeleitet werden, ich mache die Anmeldung über eine API-Datei auf dem Server (in diesem Moment der localhost) mit http.post Methode und wenn Die Anmeldung ist korrekt, der Server gibt die Zeichenfolge "T" zurück, in meiner App steuere ich, ob die Zeichenfolge gleich "T" ist und wenn es gleich ist, sollte die App den Benutzer auf die Homepage umleiten.wie state.go in ionic verwenden?

Ich habe nur ein Problem, das ist die ordnungsgemäße Verwendung der Funktion state.go();, weil ich keine Fehler in der Konsole sehe, aber die Seite ändert sich nicht, aber die URL (ich teste mit ionic serve) in ändern genau so.

Dies ist mein Code:

APP.JS:

angular.module('starter', ['ionic', 'ui.router']) 

.run(function($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
    if (window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     cordova.plugins.Keyboard.disableScroll(true); 

    } 
    if (window.StatusBar) { 
     StatusBar.styleDefault(); 
    } 
    }); 
}) 


.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { 
    $stateProvider 

    .state('login', { 
    url: '/', 
    //abstract : true, // Because your are have child-states under de 'splash' state, you should set it abstract : true; 
    templateUrl: '/login.html', 
    controller: "LoginCtrl" 
    }) 

    .state('main', { 
     url: "main.html", 
     templateUrl: "/main.html", 
    }) 
}]) 


.controller('LoginCtrl', function($scope, $http, $state, $ionicHistory) { 
    $scope.data = {}; 
    $scope.data.funzione = "login"; 
    $scope.submit = function(){ 
     //console.clear(); 
     console.log("Dentro funzione"); 
     console.log($scope.data.funzione); 
     var link = 'http://localhost/<path>/api.php'; 
     $http.post(link, {mail : $scope.data.mail}, {pwd : $scope.data.pwd}, {funzione : $scope.data.funzione}) 
      .then(function (res){ 
       console.log("Dentro http.post"); 
       $scope.response = res.data; 
       console.log($scope.response); 
       if ($scope.response != "F"){ 
        console.log("Dentro if"); 
        $state.go('main'); 
       } else { 
        console.log("Dentro else"); 
       } 
      }); 
    }; 
}); 

THIS MY-Ordner ist: (www)

enter image description here

und dies ist der URL NACH STATE.GO():

http://localhost:8100/login.html#/main.html 

Aber es sollte sein:

http://localhost:8100/main.html 
+1

angular analysiert automatisch die Antwort auf json. Das Senden von 'T' oder' F' macht also keinen Sinn. Senden Sie ein JSON-Objekt und lesen Sie die Antwort am Client-Ende. Ihre Konsole muss "Dentro else" drucken. –

+0

ja, aber mit "! = 'F'" ist immer wahr (war ein Test für state.go) @ atulquest93 – Edoardo

+0

Wo spritzt du deinen 'maincontroller' in deinen Main-State-Config-Bereich? –

Antwort

0

Ionic verwendet ui-Router. Sie machen eine korrekte Verwendung mit:

Dies funktioniert nur, wenn die Bedingung, nach der Sie suchen, wahr ist. Was drucken die console.log() Anweisungen?

********* mit Fehlerzustand AKTUALISIERT **********

Auch ein Fehlerzustand definieren: Sie definieren die url und templateUrl falsch. Die url sollte die Adresse des Status sein, den Sie in der Adressleiste sehen, die templateUrl ist die HTML-Datei, die angezeigt werden sollte, wenn Sie diese url treffen.

.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
    .state('login', { 
     url: '/login', 
     //abstract : true, // Because your are have child-states under de 'splash' state, you should set it abstract : true; 
     templateUrl: 'login.html', 
     controller: "LoginCtrl" 
    }) 
    .state('main', { 
     url: "/main", 
     templateUrl: "main.html", 
    }); 

    $urlRouterProvider.otherwise('/login'); 
}]) 
+0

$ Injektor ist nicht definiert Ich erhalte diesen Fehler – Edoardo

+0

Aktualisiert für die Einfachheit, vermeiden etwas Fantasie jetzt – User528491

0

und dies ist die URL nach STATE.GO():

http://localhost:8100/login.html#/main.html 

Aber es sollte sein:

http://localhost:8100/main.html 

Antwort: -

Eigentlich Was ich von Ihrer Frage verstehe, ist Sie ein Login-Bildschirm separat und sobald Sie sich einloggen, dann wird es zum Hauptbildschirm gehen. Sie haben ng-view in der login.html-Seite anstelle Ihrer main.html-Seite verwendet. Jetzt ist Ihre login.html eine Masterseite, deshalb erhalten Sie diese URL-Struktur.

okay, lass uns tun.bitte überprüfen Sie die fließenden Details,

  • haben Sie alle Ihre Skripte in login.html aufgerufen?

  • und überprüfen Sie bitte, welches ist Ihre Masterseite?

+0

meine Masterseite ist index.html, die die Login-Seite (window.location) aufrufen – Edoardo