我创建了一个带有多个上传csv文件的接口(完成)。
此CSV文件必须使用自定义fileReader
服务加载到导航器客户端,该服务使用$ q(已完成),然后使用ngPapaParser
(已完成)进行解析并显示在{{1}的视图中1}}(已完成但未在示例中进行简化)。
这是一个显示我有错误的傻瓜:http://plnkr.co/edit/YVvitZ2yfxjJw76n6t9F?p=preview
问题是需要在ngTable
承诺中获取文件名,但我不知道如何获取它。
fileReader.readAsText
如何让以下函数返回一个promise和文件?
controller('MainCtrl', function($scope, Papa,fileReader) {
$scope.parsedResults = [];
$scope.getFiles = function (files) {
$scope.parsedResults = [];
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
console.log(f.name); // ok her
fileReader.readAsText(f, $scope).then(function(resultText) {
Papa.parse(resultText, {
header: true,
// worker: true,
skipEmptyLines: true,
complete: function(result) {
var cols= [];
for(var i in result.meta.fields){
cols.push({
field: result.meta.fields[i] , title: result.meta.fields[i].toLowerCase() , show: true
});
}
console.log(f.name); // undefined her in the callback
//I WANT THE FILENAME HER !!!
var io = { 'filename': 'f.name unknow' ,'cols':cols ,'tableParams': result.data } ;
$scope.parsedResults.push(io);
}
});
});
}
};
});
答案 0 :(得分:1)
试试这个:
var readAsText = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsText(file);
// then will return another promise with content and file available
return deferred.promise.then(function(result){
return {
content: result,
file: file
};
});
};
您可以按如下方式使用它:
readAsText(file, $scope).then(function(result){
var content = result.content;
var file = result.file;
//...
})