Angularjs ngresource工厂返回未定义的
我正在用ngresource编写一个工厂,虽然它在成功回调中打印了值,但它不会将值返回给控制器。我在控制台中收到未定义的消息Angularjs ngresource工厂返回未定义的,angularjs,api,callback,ngresource,Angularjs,Api,Callback,Ngresource,我正在用ngresource编写一个工厂,虽然它在成功回调中打印了值,但它不会将值返回给控制器。我在控制台中收到未定义的消息 .controller('loginCtrl', function($scope,loginInfoService) { console.log(loginInfoService.getJsonId()); }) .factory('accessUrlService', ['$resource',function($resource){ return $resource
.controller('loginCtrl', function($scope,loginInfoService) {
console.log(loginInfoService.getJsonId());
})
.factory('accessUrlService', ['$resource',function($resource){
return $resource('ip/Web/ws/login/restLogin');
}])
.factory('loginInfoService', ['accessUrlService',function(accessUrlService){
return {
getJsonId: function() {
accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
console.log(data.jsessionId);
return data;
});
}
}
}])
我认为您应该尝试在
getJsonId
方法中声明return
语句
getJsonId: function() {
return accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
console.log(data.jsessionId);
return data;
});
}
在您的控制器中
调用以下方法
loginInfoService.getJsonId().$promise.then(function(response){ console.log(response); });
我认为您应该尝试在
getJsonId
方法中声明return
语句
getJsonId: function() {
return accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
console.log(data.jsessionId);
return data;
});
}
在您的控制器中
调用以下方法
loginInfoService.getJsonId().$promise.then(function(response){ console.log(response); });
我不得不在这里使用$q服务。我将$q作为参数传递给我的工厂,然后延迟响应,直到收到服务器的响应 这是经过改造的工厂
.factory('loginInfoService',['accessUrlService','$q',function(accessUrlService,$q){
return {
getJsonId: function() {
var deferred = $q.defer();
accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
deferred.resolve(data);
},function(error){
console.log("eror");
deferred.reject(error);
});
return deferred.promise;
}
}
}])
我这样在控制器中调用它
.controller('loginCtrl', function($scope,loginInfoService) {
loginInfoService.getJsonId().then(function(data){
console.log(data.jsessionId);
},function(error){
console.log(error+ " Error" )
});
})
请务必告诉我是否可以使用此代码。我必须在这里使用$q服务。我将$q作为参数传递给我的工厂,然后延迟响应,直到收到服务器的响应 这是经过改造的工厂
.factory('loginInfoService',['accessUrlService','$q',function(accessUrlService,$q){
return {
getJsonId: function() {
var deferred = $q.defer();
accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
deferred.resolve(data);
},function(error){
console.log("eror");
deferred.reject(error);
});
return deferred.promise;
}
}
}])
我这样在控制器中调用它
.controller('loginCtrl', function($scope,loginInfoService) {
loginInfoService.getJsonId().then(function(data){
console.log(data.jsessionId);
},function(error){
console.log(error+ " Error" )
});
})
请务必告诉我是否可以修改此代码。谢谢您的回复。我尝试了你的代码,但我收到一个错误,它是
TypeError:loginInfoService.getJsonId(…)。then不是一个函数
。可能是因为我使用的是ngresource而不是http.updated。控制器呼叫服务时添加“$PROMITE”谢谢您的回复。我尝试了你的代码,但我收到一个错误,它是TypeError:loginInfoService.getJsonId(…)。then不是一个函数
。可能是因为我使用的是ngresource而不是http.updated。控制器调用服务时添加“$PROMITE”