요청에 따라 서버에서 사람을로드하는 서비스를 만들려고합니다. 첫 번째 버전은 다음과 같이 보았다 :Restangular 객체를 제공하는 서비스
services.factory('PersonServiceOld', function(Restangular, ErrorService) {
var persons = [];
var requesting = [];
var get = function(id) {
if (requesting[id]) {
return persons[id];
}
requesting[id] = true;
persons[id] = {'id' : id, 'photoName' : '0.png'};
Restangular.one('persons', id).get().then(function(success) {
persons[id].firstName = success.firstName;
persons[id].lastName = success.lastName;
persons[id].photoName = success.photoName;
}, function(failure) {
requesting[id] = false;
ErrorService.serverError(failure);
});
return persons[id];
};
var reset = function() {
persons = [];
requesting = [];
};
return {
getPerson : get,
clearCache : reset,
};
});
지금 당장 개체에 대한 참조를 가져 그 방법과은 약간 후 데이터로 채워집니다. 그것은 잘 작동 ... 나는 또 다른 유스 케이스에서, 나는 또한
var person = PersonService.get(id);
person.one(address).get().then(.......
하지만 내 PersonService에서 반환 된 개체를 Restangular 개체 수없는 것처럼 사람의 주소를 요청하려는 것을 발견 할 때까지.
services.factory('PersonService', function(Restangular, ErrorService) {
var persons = [];
var get = function(id) {
if (!persons[id]) {
persons[id] = Restangular.one('persons', id);
persons[id].get().then(function(success) {
}, function(failure) {
ErrorService.serverError(failure);
persons[id] = null;
});
}
return persons[id]; // also tried: persons[id].$object
};
return {
getPerson : get
};
});
나는 누군가가 내가 여기서 할 노력하고있어 나에게 이것을 달성하는 방법에 대한 좋은 포인터를 줄 수있는 이해를 바랍니다 : 그래서 나는 다른 무언가를 시도했다.
('사람': 컨트롤러에서 다음
, 당신의 데이터를 검색 :
그래서
get
기능처럼 보일 수 있습니다 , id)? 내가 컨트롤러에서 사용하는 방식은 정확하게 동일하다 :-( – EasterBunnyBugSmasher당신이 자신의 캐시 시스템을 갖고 싶어하기 때문이다 :) 내 의견으로는 서비스를 만들 필요가 없다. Restangular는 트릭을한다. 당신은 Restangular 캐시 시스템을 사용할 수 있습니다 : https://github.com/mgonto/restangular#can-i-cache-requests) – meriadec