Javascript 为什么服务在解析状态下未定义?
我试图验证,当用户尝试访问登录页面时,如果用户已登录,系统将重定向到配置文件。为此,我解析了服务返回状态用户的承诺,但返回状态的函数未定义。我做错了什么 注1:在上一个状态的解析中,我试着去做。然后,我不知道剩下的没有。然后 注2:服务中的额外工厂并不重要 route.jsJavascript 为什么服务在解析状态下未定义?,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我试图验证,当用户尝试访问登录页面时,如果用户已登录,系统将重定向到配置文件。为此,我解析了服务返回状态用户的承诺,但返回状态的函数未定义。我做错了什么 注1:在上一个状态的解析中,我试着去做。然后,我不知道剩下的没有。然后 注2:服务中的额外工厂并不重要 route.js angular.module('Horarios.routes', ['Roles.constant','Session.service']) .config(['roles', '$stateProvider', '$
angular.module('Horarios.routes', ['Roles.constant','Session.service'])
.config(['roles', '$stateProvider', '$urlRouterProvider', function(roles, $stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/loginr');
$stateProvider
.state('sidenav', {
url: "/nav",
templateUrl: 'templates/sidenav.html',
controller: 'sidenavCtrl',
controllerAs:'side'
})
.state('loginr', {
url: "/loginr",
templateUrl: 'templates/loginr.html',
controller: 'loginCtrl',
controllerAs:'login',
resolve:{
logeado : function(sessionFactory) {
return sessionFactory.isLogeado().then(function (response) {
return response;
});
}
}
})
}])
服务
angular.module('Session.service', [])
.factory('sessionFactory',['$q','$http', function($q,$http) {
self = this;
self.isLogeado = function(){
var promesa = $q.defer();
$http.post('scripts/islogeado.php').then(function(respuesta){
promesa.resolve(respuesta);
})
return promesa.promise;
}
self.autentica = function(){
var promesa = $q.defer();
var url = "scripts/autentica.php";
$http.post(url).then(function(respuesta){
console.log(respuesta.data);
var usuario = respuesta.data;
console.log(usuario.nombre);
var primerNomb = usuario.nombre.indexOf(" ");
var primerApell = usuario.apellido.indexOf(" ");
var nombre = (primerNomb>0)? usuario.nombre.substring(0,primerNomb) : nombre = usuario.nombre;
var apellido = (primerApell>0)? usuario.apellido.substring(0,primerApell) : apellido = usuario.apellido ;
usuario.nombreApellido = nombre+" "+apellido;
console.log(primerApell);
promesa.resolve(usuario);
}, function(err){
console.log("error al consultar usuario: "+err.message);
promesa.reject(usuario);
})
return promesa.promise;
}
self.cierraSesion = function(){
var promesa = $q.defer();
$http.post('scripts/cerrar.php').then(function(){
promesa.resolve("cierra");
})
return promesa.promise;
}
return self;
}]);
app.js
angular.module('horariosapp', [
'ui.router',
'Horarios.routes',
'Mihorario.controller'
])
.run(['$rootScope', '$location', 'roles', function($rootScope, $location, roles){
$rootScope.$on('$stateChangeStart', function (event, next){
console.log("funcion run");
console.log(next);
if(next.resolve.logeado()=='noEntra'){
$state.go('loginr');
}else if (next.data !== undefined){
if (next.data.permisos.indexof(loginFactory.permiso)){
console.log("is worth");
}else{
$state.go('sidenav.perfil');
}
}
})
}])
在本例中,
logeado
有四个解析,通过三种不同的方式完成。哪些人会提出问题?没有一个有效,我解释说我是按照承诺来尝试的,没有承诺当你问一个关于你的代码引起的问题时,如果你提供人们可以用来重现问题的代码,你会得到更好的答案。