我已经定义了一个Angular资源:
app.factory('Files', function($resource) {
return $resource('/api/accounts/:account_id/sites/:site_id/files/:file_id');
});
要创建新文件,我会这样做:
var file = new Files($scope.file);
file.$save( $stateParams );
如何获取文件中使用的网址。$ save(POST / api / accounts /:account_id / sites /:site_id / files)我的控制器中是否填写了所有$ stateParams?
编辑:
我尝试使用ng-file-upload上传文件。此模块需要将URL传递给上传功能:
$scope.upload = function (file) {
var url = 'api/accounts/' + $stateParams.account_id + '/sites/' + $stateParams.site_id + '/files';
Upload.upload({
url: url,
data: {file: file}
}).then(function (resp) {
console.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);
getFiles();
}, function (resp) {
console.log('Error status: ' + resp.status);
}, function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
});
};
我想避免手工构建url变量。看看有角度的$ resource源代码我不认为这是可能的。是吗?
答案 0 :(得分:0)
为了实现您的目标,您可以通过以下方式对代码进行简单的重构:
app.factory('fileUrl', ['accountId', 'siteId', 'fileId', function fileUrlFactory(accountId, siteId, fileId) {
return '/api/accounts/' + accountId + '/sites/' + siteId + '/files/' + fileId';
}]);
现在,工厂提供了文件的URL,这样您在构造它们的代码中只有一个点。然后像这样使用:
var yourFileUrl = fileUrl($stateParams.account_id, 22, 41); //Or whaterver you need
var file = $resource(yourFileUrl);
file.$save();
请记住,$ resource本身就是一个工厂,你可以通过用适当的参数调用它来获得它的实例。