我正在包裝我的$資源請求在一個簡單的包裝。主要想法 是能夠在做出請求之前添加一些邏輯。我遵循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和DELETE方法(即不返回 身體似乎的),但我不能得到$保存工作。會發生什麼情況是,當創建資源的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代碼,但幾個小時後,我真的無法弄清楚 出來。我無法得到爲什麼正文返回,但在包裝資源中它是不可訪問的。
任何想法或幫助,將不勝感激。謝謝。