之前这个读取文件的方法:vue+js 读取上传的文件,并拿到读取文件后的内容_Make_Progress365的博客-CSDN博客_vue获取上传文件内容
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了
潘外:
例如调用另个组件TEST中的getqingqiu方法
data{
return{
adc: {},
}
}
fun(){
this.$TEST.getqingqiu().then(res => {
if (res.data.code == 200) {
this.abc= res
} else if(res.data.code == 201){
this.message.warning(res.data.msg);
} else {
// TODO 需要加异常处理
this.message.warning("提单缺陷类型查询失败")
}
}).catch(err => {
this.$loading.hide()
})
console.log("打印:",this.abc);//打印为空
//return this.abc
}
这样在外部获取不了,我们发现在这个res =>方法里面是不能用this的,所以:
fun(){
var thas = this
this.$TEST.getqingqiu().then(res => {
if (res.data.code == 200) {
thas.abc= res
} else if(res.data.code == 201){
thas.message.warning(res.data.msg);
} else {
// TODO 需要加异常处理
thas =.message.warning("提单缺陷类型查询失败")
}
}).catch(err => {
thas.$loading.hide()
})
console.log("打印:",this.abc);//这样就能打印了
//return this.abc
}