我正在开发一个应用程序,登录后应该将用户从登录页面重定向到主页,我通过服务器上的API文件进行登录(此时本地主机)使用http.post
方法并且如果登录正确,则服务器返回字符串" T"然后在我的应用程序中,我控制字符串是否等于" T"如果它等于应用程序应该将用户重定向到主页。
我只有一个问题,即正确使用函数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");
}
});
};
});
这是我的文件夹 :( www)
这是国家之后的网址.GO():
http://localhost:8100/login.html#/main.html
但它应该是:
http://localhost:8100/main.html
答案 0 :(得分:0)
Ionic使用ui-router。您正确使用:
$state.go('main');
这仅在您检查的条件为真时才有效。 console.log()
语句打印什么?
*********更新后备状态**********
另外,定义一个回退状态:
您错误地定义了url
和templateUrl
。 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');
}])
答案 1 :(得分:0)
这是国家之后的网址.GO():
http://localhost:8100/login.html#/main.html
但它应该是:
http://localhost:8100/main.html
答案: -
实际上从您的问题中可以理解的是,您有一个单独的登录屏幕,一旦您完成登录,它将进入主屏幕。您在login.html页面中使用了
ng-view
而不是main.html页面。所以现在你的login.html是一个母版页,这就是你获得这个URL结构的原因。
好吧,让我们这样做。请详细了解流动的细节,
您是否在login.html中调用了所有脚本?
请检查哪一个是您的母版页?