Javascript 返回未定义值的工厂方法
我使用工厂配方从控制器调用方法,这里是工厂定义Javascript 返回未定义值的工厂方法,javascript,angularjs,Javascript,Angularjs,我使用工厂配方从控制器调用方法,这里是工厂定义 app.factory('AccountService', function ($http){ var factory = {}; factory.getAuthenticate = function (credentials) { $http({ method: 'post', url: '/api/login', data: credent
app.factory('AccountService', function ($http){
var factory = {};
factory.getAuthenticate = function (credentials) {
$http({
method: 'post',
url: '/api/login',
data: credentials
}).success(function (data, status, headers, config){
return true;
}).error(function (data, status, headers, config){
return false;
});
}
return factory;
});
当我从一个控制器调用getAuthenticate方法时
app.controller('DefaultController', function ($scope, $location, AccountService){
$scope.login = function(){
alert(AccountService.getAuthenticate($scope.credentials));
// if(AccountService.getAuthenticate($scope.credentials)) {
// $location.path('/dashboard');
// }
}
});
它总是根据http调用返回undefined,而不是true或false。知道我遗漏了什么吗?$http方法会自动返回一个承诺。因此,您必须在控制器中处理此问题。您的代码应如下所示:
app.factory('AccountService', function ($http){
var factory = {};
factory.getAuthenticate = function (credentials) {
return $http({
method: 'post',
url: '/api/login',
data: credentials
});
};
return factory;
});
app.controller('DefaultController', function ($scope, $location, AccountService){
$scope.login = function(){
AccountService.getAuthenticate($scope.credentials)
.success(function (response) {
alert('Everything went better than expected :)');
$location.path('/dashboard');
})
.error(function (error) {
alert(error);
});
};
});
你的函数在一秒钟内不会返回任何东西,你正在进行asyc调用,因此你的函数将在ajax请求完成之前返回。正如Patrick所说,异步函数不会返回这样的值,要么返回承诺,要么使用回调。回调应该从控制器中抽象出来并放入工厂。您应该仅在使用该服务拨打电话后在控制器内部进行数据绑定。