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请求的要求。你应该退房。