【发布时间】:2014-11-27 17:49:55
【问题描述】:
我正在尝试将 csv 文件加载到 AngularJS 中,以便对内容进行一些操作。它不像我想要的那样工作。为了测试它是否正确加载,我将其加载到文本区域以查看内容。
当我加载文件时,它说它已正确加载,但在我加载第二个 CSV 文件之前,onload() 事件似乎没有触发,在这种情况下,第一个文件显示在 textarea 中。
HTML:
<div>
<input ng-model="csv"
onchange="angular.element(this).scope().fileChanged()"
type="file" accept=".csv" id="fileInput"/>
</div>
<br/>
<div>
<textarea ng-model="csvFile" readonly="true" style="width:99%; height:500px" disabled></textarea>
</div>
JS:
$scope.fileChanged = function() {
$scope.$apply(function() {
var csvFileInput = document.getElementById('fileInput');
var reader = new FileReader();
var csvFile = csvFileInput.files[0];
reader.onload = function(e) {
$scope.csvFile = reader.result;
};
reader.readAsText(csvFile);
});
};
当我将它放入 JSFiddle 时,该文件根本不会出现在 textarea 中。我是 JSFiddle 的新手,所以我不知道为什么会这样。
任何帮助都将不胜感激。
【问题讨论】:
-
我认为你需要使用 $parse
-
@aarosil 你是什么意思?在哪里?
-
您可以尝试以下操作:交换行
$scope.$apply(function()和reader.onload = function(e) {,现在将var reader = new FileReader();移动到reader.onload之前和reader.readAsText(csvFile);之后reader.onload块 -
@przno 是的!那行得通。如果你想把它写成答案,我会赞成并接受它。另外,如果您可以简短地解释一下为什么会起作用,我将不胜感激。 :)
-
旁注 #1:
onchange="angular.element(this).scope().fileChanged()"不是正确的 Angular 方式,您应该使用 ng-change,例如ng-change="fileChanged()"
标签: javascript html angularjs filereader