typescript - 如何在 TypeScript 中加载文件
问题描述
我是 Typescript 的新手,有语法问题。我现在想加载用户选择的文件(不使用 JQuery)并将结果打印到控制台。我在 JS 中遵循了一些指南,但没有成功。这就是我到目前为止所拥有的。
索引.html
<input type="file" id="file-input" >
索引.ts
document.getElementById("file-input").addEventListener("change", e => {
var reader = new FileReader();
var self = this;
reader.onload = file => {
var contents: any = file.target;
self.text = contents.result;
};
console.log(self.text.toString());
}, false);
这会在控制台报告中出现以下错误:
Uncaught TypeError: Cannot read property 'toString' of undefined
at HTMLInputElement.<anonymous>
我不太确定如何从缓冲区中获取文本,或者我是否正确设置它。
更新:修改后的当前代码:
document.getElementById("file-input").addEventListener("change", async (e) => {
var file = (<HTMLInputElement>e.target).files[0];
var reader = new FileReader();
reader.onload = file => {
var contents: any = file.target;
this.text = contents.result;
console.log(this.text.toString());
};
}, false);
解决方案
专注于代码
reader.onload = file => {
var contents: any = file.target;
self.text = contents.result;
};
console.log(self.text.toString());
您认为它具有的执行顺序:
reader.onload = file => {
var contents: any = file.target;
self.text = contents.result; // FIRST
};
console.log(self.text.toString()); // SECOND
实际执行顺序:
reader.onload = file => {
var contents: any = file.target;
self.text = contents.result; // SECOND
};
console.log(self.text.toString()); // FIRST
因此,您收到错误,因为.text
时间self.text.toString
运行未分配。
使固定
单程:
reader.onload = file => {
var contents: any = file.target;
self.text = contents.result; // FIRST
console.log(self.text.toString()); // SECOND
};
推荐阅读
- docker - Docker 容器无法与 Nvidia nsight 系统一起使用
- sql-server - Group By Clause 不能通过 Spring Boot 的 Postman 工作
- php - 从 PHP 代码 HY000/1049 访问 MySQL 数据库时出错
- sql - 将 2 个表值函数合并为一个具有不同列的表
- angular - SVG.js 中的 scale 和 pointAt 问题
- python - Python:从列表中动态生成属性
- python - 获取白色像素的坐标以形成曲线
- javascript - 在对象数组中添加/删除设置/存储在状态中的列时,功能组件数据表不重新呈现
- java - 在 Spring Boot 中在 REST API 上配置 Websocket
- gradle - Gradle 创建包含子项目源的 javadoc