2016-03-01 49 views
1

我正在用ngresource编写一个工厂,尽管它在成功回调中输出值,但它不会将值返回给控制器。我在控制台中收到Undefined。ngresource factory returns undefined

.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;         
       });  
      } 
     } 

}]) 

回答

0

我想你应该尝试在你的getJsonId方法

getJsonId: function() {   
       return accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){ 
       console.log(data.jsessionId);       
       return data;         
       });  
      } 

而在你controller调用此方法来声明一个return声明像

loginInfoService.getJsonId().$promise.then(function(response){ console.log(response); }); 
+0

感谢您的回复。我试过你的代码,但我收到一个错误,说'TypeError:loginInfoService.getJsonId(...)。然后不是一个函数。可能是因为我正在使用ngresource而不是http。更新了 –

+0

。控制器呼叫服务时添加“$ promise” – Denis

0

我不得不使用$ 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") 
    }); 
}) 

请让我知道,如果我可以impove此代码。