我一直在一些存儲庫中使用自定義操作。直到現在,我只需要指定url和方法。
例如:
updatePassword: {
url: ENV.NITRO_PROJECT_REST_URL + '/admins/:adminId/password',
method: 'PUT'
}
但後來,我不得不代碼有,不是一個自定義操作,但有兩個路徑參數:
technicianModule.controller('technician.teamCtrl',
['$scope', '$state', '$stateParams', 'CommonService', 'TechnicianService', 'TeamService', 'TeamTechnicianService',
function($scope, $state, $stateParams, CommonService, TechnicianService, TeamService, TeamTechnicianService) {
$scope.add = function(teamId) {
TeamTechnicianService.add(teamId, $stateParams.technicianId, function() {
TeamService.get(teamId, function(data) {
$scope.teams.push(data);
$scope.unassignedTeams.splice(CommonService.getResourceIndex($scope.unassignedTeams, data), 1);
});
});
};
}
]);
teamModule.factory('TeamTechnicianService',
['RESTService',
function(RESTService) {
var factory = {};
factory.add = function(teamId, technicianId, callback) {
return RESTService.TeamTechnician.add({teamId: teamId, technicianId: technicianId}).$promise.then(callback);
}
return factory;
}
]);
所以我第一編碼它想:
TeamTechnician: $resource(ENV.NITRO_PROJECT_REST_URL + '/teamtechnicians/:teamtechnicianId', {}, {
add: {
url: ENV.NITRO_PROJECT_REST_URL + '/teamtechnicians/:teamId/:technicianId',
method: 'POST'
}
但它不會工作。參數未被傳入。
經過幾次嘗試後,我發現它在添加一些參數定義時工作正好在自定義動作定義之前。
它必須是這樣的:
TeamTechnician: $resource(ENV.NITRO_PROJECT_REST_URL + '/teamtechnicians/:teamtechnicianId', {
teamId: '@teamId',
technicianId: '@technicianId'
}, {
add: {
url: ENV.NITRO_PROJECT_REST_URL + '/teamtechnicians/:teamId/:technicianId',
method: 'POST'
}
注意的存在:
teamId: '@teamId',
technicianId: '@technicianId'
我的理解是那麼在$資源定義,有多個路徑參數自定義操作,要求用@符號來定義它們。
而不是當它只有一個。
這是爲什麼?
爲什麼不能在自定義操作中聲明路徑參數,而不是在資源上面聲明?
您對默認參數的解釋不僅僅是官方文檔。 – Stephane 2014-09-19 14:26:40
好的,每個自定義動作都可以聲明參數。但爲什麼我需要參數用於我的POST而不是我的PUT點? – Stephane 2014-09-19 14:28:20
@StephaneEybert:POST和PUT方法的處理方式相同,所以不應有任何區別。你可以提供一個小提琴或至少一個** [SSCCE](http://sscce.org)**,以便我可以重現你面臨的問題? (順便說一下,如果這個答案幫助你不忘記上傳和/或接受它) – gkalpak 2014-09-19 18:51:30