2016-11-24 48 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