2016-11-24 5 views
1

Я разрабатываю приложение, и после входа в систему он должен перенаправить пользователя со страницы входа на главную страницу, я делаю вход через файл API на сервере (в этот момент localhost) с помощью метода http.post и если логин верен, сервер возвращает строку «Т», а затем в моем приложении я управляю, если строка равна «Т», и если она равна, приложение должно перенаправить пользователя на домашнюю страницу.способ использования state.go in ионный?

У меня есть только одна проблема, которая правильное использование функции state.go();, потому что я не вижу никаких ошибок в консоли, но страница не изменяется, но url (я тестирую с 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"); 
       } 
      }); 
    }; 
}); 

ЭТО МОЯ FOLDER: (WWW)

enter image description here

И ЭТО URL AFTER STATE.GO():

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

Но это должно быть:

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

угловой автоматически анализирует ответ на json. Поэтому отправка 'T' или' F' dosen't имеет смысл. Отправьте некоторый json-объект, а затем прочитайте ответ на стороне клиента. Ваша консоль должна печатать 'Dentro else'. –

+0

Да, но с "! = 'F'" всегда верно (был тест для выполнения state.go) @ atulquest93 – Edoardo

+0

Где вы вводите свой 'maincontroller' в свой раздел конфигурации основного состояния? –

ответ

0

Ионные использует UI-маршрутизатор. Вы правильно исправьте: $state.go('main');

Это будет работать, только если условие, которое вы проверяете, верно. Что печатает заявления console.log()?

********* ОБНОВЛЕНО с резервного состояния **********

Кроме того, определить замещающее состояние: Вы определите url и templateUrl неправильно. url должен быть адресом состояния, которое вы видите в адресной строке, templateUrl - это файл HTML, который должен отображаться при попадании этого url.

.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

И это URL ПОСЛЕ STATE.GO():

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

Но это должно быть:

http://localhost:8100/main.html 

Ответ: -

На самом деле что я понимаю из вашего вопроса: у вас есть экран входа в систему отдельно, и как только вы входите в систему, он перейдет на главный экран. Вы использовали ng-view на странице login.html, а не на странице main.html. Итак, теперь ваш login.html является главной страницей, поэтому вы получаете эту структуру URL.

OK сделаем.любезно оформление рассылки,

  • Вы назвали все ваши скрипты в login.html?

  • и, пожалуйста, проверьте, какая из них является вашей главной страницей?

+0

моей главной страницей является index.html, который вызывает (window.location) страницу входа – Edoardo

Смежные вопросы