2015-05-04 157 views
2

我定義了一個工廠,返回一個$resource

myApp.factory('Region', function($resource) { 
    return $resource(baseUrl + '/templates/:templateId/regions/:regionId', null, { 
     query: { 
      method: 'GET', 
      isArray: false 
     }, 
     update: { 
      method: 'PUT' 
     } 
    }); 
}); 

正如你所看到的,一個區域是一個模板的子資源,我已經定義了端點/templates/:templateId/regions/:regionId

我希望保存新區域時出現問題。如何指定templateId將區域保存到?這裏是我的片斷:

$scope.save = function() { 
    if ($scope.mode === 'edit') { 
     // TODO 
    } else { 
     Region.save($scope.region, function(success) { 
      $state.go('app.templateList') 
     }); 
    } 
}; 

在所有其他資源我有我剛剛用Model.save($scope.model);,我不知道如何指定其他URL參數和角文檔似乎並沒有掩蓋它。

回答

2

根據the docs,非GET(例如PUT)方法接受以下參數

Resource.save([parameters], postData, [success], [error]). 

parameters是路徑參數和它是可選的,postData - 請求的主體。如果要提供templateId,只需將其添加爲第一個參數:

Region.save({templateId: 'id'}, $scope.region, function(success) { 
    $state.go('app.templateList') 
}); 
0

我已經遇到了類似的dillema。我想到了一些通用的約定要在其中創建子資源X例如,由一些資源擁有集合的新元素,易建聯並沒有做

POST /api/Y/<yId>/X 

然後訪問X的集合由Y擁有:

GET /api/Y/<yId>/X 

然而,對於修改或刪除子資源,我們可以直接訪問子資源:

PUT /api/X/<xId> 
DELETE /api/X/<xId> 

達到上述我們可以使用$resource定義

Subresource = $resource('/api/:parent/:parentId/subresource/:id', 
    { id: '@id' }, 
    { 
    'update': { method:'PUT' } // this is because Angular lacks PUT support 
    }); 

那麼我們就可以使用它像

var subresourceList; 
Subresource.query({parent: 'Y', parentId: parentId }, 
    function(result) { 
    // handle result here 
    subresourceList = result; 
    }); 

和修改單個子資源對象後,我們就可以使用

var subresource = subresourceList[0]; 
subresource.someProp = 'newValue'; 
subresource.$update() 

與早期子資源定義$更新將做PUT直接將它保存/api/X/<xId>只要子資源X對象被修改與其擁有Y無關,這是合理的。