간단한 래퍼에서 $ 리소스 요청을 래핑하려고합니다. 주요 아이디어 은 요청이 이루어지기 전에 일부 로직을 추가 할 수 있습니다. 나는 Nils에 의해 써지는 멋진 기사를 따라 갔다.
은 여기에서 REST API를 모듈에 액세스 할 수있는 서비스 정의를 볼 수 있습니다.
resources.factory('Device', ['RequestWrapper', '$resource', 'lelylan.config', function(RequestWrapper, $http, config) {
var resource = $resource(config.endpoint + '/devices/:id', { id: '@id' });
return RequestWrapper.wrap(resource, ['get', 'query', 'save', 'delete']);
}]);
여기에서 요청 래퍼 정의를 볼 수 있습니다.
resources.factory('RequestWrapper', ['AccessToken', function(AccessToken) {
var requestWrapper = {};
var token;
requestWrapper.wrap = function(resource, actions) {
token = AccessToken.initialize();
var wrappedResource = resource;
for (var i=0; i < actions.length; i++) { request(wrappedResource, actions[i]); };
return wrappedResource;
};
var request = function(resource, action) {
resource['_' + action] = resource[action];
resource[action] = function(param, data, success, error) {
(AccessToken.get().access_token) ? setAuthorizationHeader() : deleteAuthorizationHeader()
return resource['_' + action](param, data, success, error);
};
};
var setAuthorizationHeader = function() {
$http.defaults.headers.common['Authorization'] = 'Bearer ' + token.access_token;
};
var deleteAuthorizationHeader = function() {
delete $http.defaults.headers.common['Authorization']
};
return requestWrapper;
}]);
모든 것은 GET을 위해 잘 작동 및 삭제 방법 (몸이 보인다 반환하지 않는 사람을),하지만 작업 저장 $ 얻을 수 없습니다. 어떤 일이 발생하면 의 JSON이 리소스를 반환 할 때 추가되지 않습니다. 내가 만든 데이터가 단계에만 설정되어 있습니다. 예를 들어 보겠습니다. 이 경우
우리는 랩 자원을 사용합니다. #updated_at 속성을 얻으려고하면 을 볼 수 없습니다. Chrome 관리자에서 리소스가 어떻게 성공적으로 생성되었는지 확인할 수 있습니다.$scope.device = new Device({ name: 'Angular light', type: 'http://localhost:9000/types/50bf5af4d033a95486000002' });
$scope.device.$save(function(){ console.log('Device Wrapped', $scope.device.created_at) });
# => undefined
모든 리소스가 정상적으로 작동하면.
// Suppose authorization is already set
var Resource = $resource('http://localhost\\:9000/devices/:id');
$scope.resource = new Resource({ name: 'Angular light', type: 'http://localhost:9000/types/50bf5af4d033a95486000002' });
$scope.resource.$save(function(){ console.log('Device Base', $scope.resource.created_at); });
# => 2013-02-09T12:26:01Z
나는 각-resource.js 코드를 확인하기 시작했지만 몇 시간 후 난 정말 그것을 알아낼 수 없었다. 본문이 반환되는 이유는 알 수 없지만 래퍼 리소스에서는 액세스 할 수 없습니다.
어떤 아이디어 나 도움을 주시면 감사하겠습니다. 감사. AngularJS와 소스 코드에 다이빙 내가 해결책을 찾았 동안