Angular:如何获取资源操作的URL?

时间:2015-11-17 09:15:41

标签: javascript angularjs angular-resource

我已经定义了一个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源代码我不认为这是可能的。是吗?

1 个答案:

答案 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本身就是一个工厂,你可以通过用适当的参数调用它来获得它的实例。