之前这个读取文件的方法:blog.csdn.net/Make_Progre…
handleChange(file) {
let reader = new FileReader(); //先new 一个读文件的对象 FileReader
if (typeof FileReader === "undefined") { //用来判断你的浏览器是否支持 FileReader
this.$message({
type: "info",
message: "您的浏览器不支持文件读取。"
});
return;
}
// reader.readAsText(file.raw, "gb2312"); //读.txt文件
reader.readAsArrayBuffer(file.raw); //读任意文件
reader.onload = function (e) {
var ints = new Uint8Array(e.target.result); //要使用读取的内容,所以将读取内容转化成Uint8Array
ints = ints.slice(0, 5000); //截取一段读取的内容
let snippets = new TextDecoder('gb2312').decode(ints); //二进制缓存区内容转化成中文(即也就是读取到的内容)
console.log("读取的内容如下:");
console.log(snippets);
};
},
我们发现snippets这个内容只能再内部打印出来,外部打印为空,查了百度半天也没有查出原因,一步步调式研究发现是reader.onload = function (e)这个用法的问题;
这里的function 用法是不能用this的,你会发现this.xxx或this.方法()都没有效果,那是function本身的作用于问题,也是this指向问题,reader.onload = e => {}改成这种
reader.onload = e = {
var ints = new Uint8Array(e.target.result); //要使用读取的内容,所以将读取内容转化成Uint8Array
ints = ints.slice(0, 5000); //截取一段读取的内容
let snippets = new TextDecoder('gb2312').decode(ints); //二进制缓存区内容转化成中文(即也就是读取到的内容)
console.log("读取的内容如下:");
console.log(snippets);
};
//外部
console.log("读取的内容如下:");
console.log(snippets);
this.xxx = snippets //把值赋于全局变量,供其他地方调用
如果要用function,那就建议var $this = this; 然后在function内部用$this。自己试试
在举一个例子,延迟setTimeout()方法
setTimeout(function () { }, 1000);
在VUE中,你在function里含有this,那么你会发现报错,你根本不能调用方法和变量,也不能加var $this = this; 所以即还是把function改成e => {}
setTimeout(e =>() { }, 1000);
这样你就可以直接使用this了