HTML5文件阅读器API:事件'加载'不会着火
HTML5 File Reader API: the event 'onload' does not fire
我是AngularJS、HTML5和JavaScript的新手。我正在angularjs中做一项读取文本文件的服务。我使用的是HTML5文件阅读器API。问题是事件"onload"(或其他)没有激发。这就是服务:
angular.module('uploadFiles').factory('readFileAsTextService', function () {
return {
readFile: function (file) {
var reader = new FileReader();
if (window.File && window.FileReader && window.FileList && window.Blob) {
if ((file !== undefined) && (file !== null)) {
reader.onload = function (event) {
return event.target.result;
};
reader.readAsText(file);
}
}
}
};
});
这里的控制器:
angular.module('uploadFiles').controller('UploadFileController', ['$scope', 'validFileExtensions', 'readRouteAsTextService',
function FileUploadCtrl($scope, validFileExtensions, readFileAsTextService) {
$scope.setFiles = function (element) {
$scope.$apply(function ($scope) {
$scope.files = [];
for (var i = 0; i < element.files.length; i++) {
if validFileExtensions.validate(element.files[i].name,filesExtensions)) {
$scope.files.push(element.files[i]);
filesText[i] = readFileAsTextService.readFile(element.files[i]);
}
}
});
};
}]);
我将展示一个必须工作的代码:
angular.module('uploadFiles').factory('readFileAsTextService', ["$q", function ($q) {
return {
readFile: function (file) {
var deferread = $q.defer();
if (window.File && window.FileReader && window.FileList && window.Blob) {
var reader = new FileReader();
if ((file !== undefined) && (file !== null)) {
reader.onload = function (event) {
deferred.resolve(event.target.result);
};
reader.readAsText(file);
}else{
deferred.resolve("You need to pass a file.");
}
}else{
deferred.resolve("Your browser don't support File api.");
}
return deferread.promise;
}
};
}]);
并且在您的控制器中:
angular.module('uploadFiles').controller('UploadFileController', ['$scope', 'validFileExtensions', 'readRouteAsTextService',
function FileUploadCtrl($scope, validFileExtensions, readFileAsTextService) {
$scope.setFiles = function (element) {
$scope.files = [];
for (var i = 0; i < element.files.length; i++) {
if(validFileExtensions.validate(element.files[i].name,filesExtensions)) {
$scope.files.push(element.files[i]);
(function(i){
readFileAsTextService.readFile(element.files[i]).then(function(text){
filesText[i] = text;
})
})(i);
}
}
};
}]);
告诉我它是否有效。
相关文章:
- 召回窗口加载事件 - javascript
- 仅加载事件序列
- cookie加载事件页面重定向
- 正在捕获动态更改其源的图像的加载事件
- 如何从vb.net中的页面加载事件中调用特定的javascript函数
- 在iframe中加载pdf时,iframe未触发加载事件
- 点击加载事件按钮
- jQuery-将加载事件附加到动态加载的元素
- 不;t使用ajax在fullcalender.js中加载事件数据
- 加载事件中的“太多递归”
- 每10秒调用一次页面加载事件
- jQuery"该参考文献“;加载事件后未设置
- ASP网格视图的重新加载事件
- 在点击和加载事件时播放暂停背景音频
- 引导模式加载事件
- 页面中的条件在卸载之前加载事件
- 如何在 asp.net 中的页面加载事件之前调用 JavaScript 确认对话框
- 位置.重新加载事件触发按钮单击事件
- iframe 加载事件中的 setTimeout 似乎没有像预期的那样等待 x 秒
- 图像加载事件未触发