AngularJS watch FileReader().readyState change
AngularJS watch FileReader().readyState change
这是我在AngularJS中读取本地文件的代码。
var files = document.getElementById("file");
files.addEventListener("change", handleFile, false);
function handleFile(event) {
SpinnerService.upload(); // Show loading spinner
var file = event.target.files[0];
var reader = new FileReader();
$timeout(function() {
scope.readyState = reader.readyState;
});
reader.onload = function(event) {
// Read the file
};
reader.readAsArrayBuffer(file);
scope.$watch("readyState", function(newVal) {
if (newVal == 2) {
SpinnerService.hide(); // Hide loading spinner
}
})
}
读取文件时,reader.readyState
将从 0 更改为 1,然后更改为 2。(https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readyState)。
我的代码确实成功读取了该文件。但是,readyState
上的$watch
不起作用。有什么办法可以观察readyState
的变化吗?感谢您的帮助!
我建议再次在处理程序函数中设置手表,因为它每次被触发时都会添加新的手表。然后你把scope.readyState设置为reader.readyState,这是一个实际值,有点像设置 x = 2 并等待它更改为其他内容。
试试这个:
// new empty object
scope.reader = {}
var files = document.getElementById("file");
files.addEventListener("change", handleFile, false);
// set watch on object property
scope.$watch("reader.readyState", function(newVal) {
if (newVal == 2) {
SpinnerService.hide(); // Hide loading spinner
}
})
function handleFile(event) {
SpinnerService.upload(); // Show loading spinner
var file = event.target.files[0];
var reader = new FileReader();
// set object to reader
scope.reader = reader;
reader.onload = function(event) {
// Read the file
};
reader.readAsArrayBuffer(file);
}
另外,我认为wero的评论是最好的解决方案
相关文章:
- Selenium WebDriver and JavaScript change
- Bootstrap 3 Datepicker v4:dp.show和dp.change事件在Datepicker内联时不
- 带有.change()的AJAX不起作用
- Change iframe src
- 动态填充Bootstrap选择选择器:change event dos'不起作用
- 在IE9中使用jQuery.change定位select元素
- Sencha触摸,字段设置为Change Listener
- Jquery change onchange in onload
- Javascript、jquery、主干网、splunk:on(“change”、{data}、handler)导致Ty
- 在change事件javascript上动态添加行
- 为什么“ng checked”不适用于“ng change”
- 了解'这'在jQuery on change事件中
- 如何通过JQuery触发JS原生甚至addEventListener(“change”,函数)
- jQuery change()和bind(“change”)不起作用
- 为什么我的on change事件在ie9上返回空
- 试图在change上激发多个函数
- jQuery.change()事件未被触发
- Firefox Addon为什么标签页的readystate未定义
- Bootstrap 3 DateTimePicker-绑定到角度模型没有'在'dp.change'
- AngularJS watch FileReader().readyState change