【发布时间】:2018-08-17 09:30:09
【问题描述】:
如何强制
this.json = reader.result;
在给定的范围内正确地为 this.json 赋值?
因为值存在,但没有赋值。
<div id="app" >
<label class="text-reader"><input type="file" v-on:change="getFile($event)"></label>
{{ json }} // it's being set to "test" from getFile function.
</div>
这是 VueJS 代码
new Vue
({
el: '#app',
data: {
json: {}
},
methods:
{
getFile: function(ev)
{
this.json = "test";
var file = ev.target.files[0];
var reader = new FileReader();
reader.onload = function(e)
{
this.json = reader.result;
console.log(this.json); // displays content properly
}
reader.readAsText(file);
}
}
});
到目前为止我一直在尝试的只是添加某种处理程序
getFile: function(ev)
{
var file = ev.target.files[0];
var reader = new FileReader();
reader.onload = function(e)
{
this.callBackHandler(reader.result);
}
reader.readAsText(file);
},
callBackHandler: function(val)
{
console.log(val);
this.json = val;
}
它大叫:
TypeError: this.callBackHandler 不是函数
同样使用 callBackHandler 作为参数。
<label class="text-reader"><input type="file" v-on:change="getFile($event, callBackHandler())"></label>
getFile: function(ev, handler)
{
var file = ev.target.files[0];
var reader = new FileReader();
reader.onload = function(handler)
{
handler(reader.result);
}
reader.readAsText(file);
},
callBackHandler: function(val)
{
console.log(val);
this.json = val;
}
【问题讨论】:
-
使用箭头函数或将
this绑定到你的reader.onload函数;或者这样:声明 let self = this;在 getFile 方法中,然后在 reader.onload 中使用 self.callBackHandler() -
@ElDanielo 请把它写成答案,它有效。 reader.onload = (x => { this.callBackHandler(reader.result); });
标签: javascript vue.js vuejs2 frontend