Javascript 角度:如何获取资源操作的url?
我定义了一个角度资源,如下所示:Javascript 角度:如何获取资源操作的url?,javascript,angularjs,angular-resource,Javascript,Angularjs,Angular Resource,我定义了一个角度资源,如下所示: app.factory('Files', function($resource) { return $resource('/api/accounts/:account_id/sites/:site_id/files/:file_id'); }); var yourFileUrl = fileUrl($stateParams.account_id, 22, 41); //Or whaterver you need var file = $resource
app.factory('Files', function($resource) {
return $resource('/api/accounts/:account_id/sites/:site_id/files/:file_id');
});
var yourFileUrl = fileUrl($stateParams.account_id, 22, 41); //Or whaterver you need
var file = $resource(yourFileUrl);
file.$save();
要创建新文件,我将执行以下操作:
var file = new Files($scope.file);
file.$save( $stateParams );
如何在控制器中获取file.$save(POST/api/accounts/:account\u id/sites/:site\u id/files)使用的url,并填写所有$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变量。看看angular$resource源代码,我认为这是不可能的。是吗?为了实现您想要的功能,您可以通过以下方式对代码进行简单的重构:
app.factory('fileUrl', ['accountId', 'siteId', 'fileId', function fileUrlFactory(accountId, siteId, fileId) {
return '/api/accounts/' + accountId + '/sites/' + siteId + '/files/' + fileId';
}]);
现在,工厂为文件提供URL,这样您的代码中只有一个构建它们的点。然后像这样使用:
app.factory('Files', function($resource) {
return $resource('/api/accounts/:account_id/sites/:site_id/files/:file_id');
});
var yourFileUrl = fileUrl($stateParams.account_id, 22, 41); //Or whaterver you need
var file = $resource(yourFileUrl);
file.$save();
请记住,$resource本身就是一个工厂,您可以通过使用适当的参数调用它来获得它的实例。为了完成您想要的任务,您可以通过以下方式对代码进行简单的重构:
app.factory('fileUrl', ['accountId', 'siteId', 'fileId', function fileUrlFactory(accountId, siteId, fileId) {
return '/api/accounts/' + accountId + '/sites/' + siteId + '/files/' + fileId';
}]);
现在,工厂为文件提供URL,这样您的代码中只有一个构建它们的点。然后像这样使用:
app.factory('Files', function($resource) {
return $resource('/api/accounts/:account_id/sites/:site_id/files/:file_id');
});
var yourFileUrl = fileUrl($stateParams.account_id, 22, 41); //Or whaterver you need
var file = $resource(yourFileUrl);
file.$save();
请记住,$resource本身就是一个工厂,您可以通过使用适当的参数调用它来获得它的实例。我不习惯ng文件上载,但从我收集的信息来看,您应该在
数据
对象中提供额外的数据,该对象可以包含文件
以外的其他字段。我想这将满足您构建包含文件和其他数据的POST请求的要求。您应该签出。我不习惯ng文件上载,但根据我收集的信息,您应该在数据
对象中提供附加数据,该对象可以保存文件
以外的其他字段。我想这将满足您构建包含文件和其他数据的POST请求的要求。你应该退房。