2016-03-01 46 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此代碼。