2016-11-24 31 views
1

我正在開發一個應用程序,登錄後應該將用戶從登錄頁面重定向到主頁,我正在通過服務器上的API文件(在這一刻是本地主機)使用http.post方法進行登錄,如果登錄是正確的服務器返回字符串「T」然後在我的應用程序我控制,如果字符串等於「T」,如果它是等於應用程序應該重定向用戶到主頁。如何在離子狀態下使用state.go?

我只有一個問題,這是正確使用的功能state.go();,因爲我沒有看到在控制檯中的任何錯誤,但頁面不會改變,但網址(我測試ionic serve)改變確切的方式。

這是我的代碼:

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 IS MY文件夾:(WWW)

enter image description here

,這是URL後STATE.GO()

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

但它應該是:

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

angular自動分析對json的響應。所以發送'T'或'F'不合乎情理。發送一些json對象,然後在客戶端讀取響應。你的控制檯必須打印'Dentro else'。 –

+0

是的,但用「!='F'」總是爲真(是做state.go的測試)@ atulquest93 – Edoardo

+0

你在哪裏將maincontroller注入主狀態配置部分? –

回答

0

離子使用的UI路由器。您正確使用: $state.go('main');

這隻有在您檢查的條件爲真時纔有效。 console.log()報表打印什麼?

*********更新,回退狀態**********

另外,定義一個備用狀態: 您定義urltemplateUrl不正確。 url應該是您在地址欄中看到的狀態的地址,templateUrl是應該在達到url時顯示的HTML文件。

.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

$注射器沒有定義我收到這個錯誤 – Edoardo

+0

更新爲簡單,避免任何奇特現在 – User528491

0

,這是後STATE.GO)的URL(

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

但它應該是:

http://localhost:8100/main.html 

答: -

其實你的問題所理解的是,你有一個登錄屏幕分開,一旦你登錄完成,然後它將轉到主屏幕。您在login.html頁面中使用了ng-view,而不是您的main.html頁面。所以現在你的login.html是一個母版頁,這就是你得到這個URL結構的原因。

好吧讓我們來做。請結帳流動的細節,

  • 您是否在login.html中調用了您的所有腳本?

  • 請檢查哪一個是您的母版頁?

+0

我的母版頁是index.html調用(window.location)的登錄頁面 – Edoardo

相關問題