2015-11-17 52 views
1

我已經定義了一個角資源是這樣的:Angular:如何獲取資源操作的url?

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); 

如何獲得通過的文件中使用的URL $保存(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變量。看看角度$資源的源代碼,我不認爲這是可能的。是嗎?

+0

我不習慣ng文件上傳,但從我收集你應該提供額外的數據''數據'對象,它可以容納除'file'one之外的其他字段。我想這會回答你的要求來構造一個POST請求來保存一個文件和其他數據。你應該檢查[他們的上傳服務文檔](https://github.com/danialfarid/ng-file-upload/blob/master/README.md#upload-service)。 – Aaron

回答

0

爲了完成你願意,你可以做你的代碼的簡單重構這樣的內容:

app.factory('fileUrl', ['accountId', 'siteId', 'fileId', function fileUrlFactory(accountId, siteId, fileId) { 
    return '/api/accounts/' + accountId + '/sites/' + siteId + '/files/' + fileId'; 
}]); 

現在,工廠提供的網址文件,這樣你只在一個點你代碼在哪裏構建它們。然後,使用這樣的:

var yourFileUrl = fileUrl($stateParams.account_id, 22, 41); //Or whaterver you need 
var file = $resource(yourFileUrl); 
file.$save(); 

請記住,$資源本身就是一個工廠,你可以得到它通過與適當的PARAMS調用它的含義就是實例。