2016-03-01 6 views
1

Я пишу фабрику с ngresource и хотя она печатает значение в обратном вызове успеха, оно не возвращает значение обратно контроллеру. Я получаю Undefined в консоли.ngresource factory возвращает 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

Я думаю, вы должны попытаться объявить return заявление в вашем getJsonId методе

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

И в вашем controller вызове этого метода, как

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

Благодарим за отзыв. Я пробовал ваш код, но я получаю сообщение об ошибке «TypeError: loginInfoService.getJsonId (...), а затем не является функцией». Вероятно, потому что я использую ngresource вместо http. –

+0

обновлен. «$ prom» добавляется, когда контроллер вызывает услугу – 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") 
    }); 
}) 

Дайте мне знать, могу ли я поменять этот код.

 Смежные вопросы

  • Нет связанных вопросов^_^