vue2中的methods,在onProgress函数中如何获取和修改data中的变量。完整代码如下,报错访问不到data中的totalUploadedSize 变量:
tusUpload(files) {
var file = files[0];
var upload = new tus.Upload(file, {
onProgress: function (bytesUploaded, bytesTotal) {
var percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2)
this.totalUploadedSize += bytesUploaded
// 箭头
},
})
在 Vue 2 中,如果你想在 onProgress
函数中访问并修改 data
中的变量,你需要使用 this
来引用 Vue 实例的 data
。但是,由于 onProgress
是一个普通的 JavaScript 函数,它没有直接访问 Vue 实例的上下文,因此你需要通过 bind()
或箭头函数来确保正确的 this
上下文。
修改后的代码示例
methods: {
tusUpload(files) {
// 获取选择的文件
var file = files[0];
var upload = new tus.Upload(file, {
// 上传进度回调
onProgress: (bytesUploaded, bytesTotal) => {
// 使用箭头函数,确保 `this` 指向 Vue 实例
var percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
this.totalUploadedSize += bytesUploaded; // 使用 `this` 来修改 Vue 实例中的数据
console.log(this.totalUploadedSize); // 输出更新后的 `totalUploadedSize`
},
});
}
关键点
-
箭头函数
onProgress
:在onProgress
中,使用箭头函数() => {}
来确保this
指向 Vue 实例,从而能够访问和修改 Vuedata
中的变量(比如this.totalUploadedSize
)。 -
通过
this
访问和修改数据:在onProgress
中,this.totalUploadedSize
用于获取和修改 Vue 实例中的totalUploadedSize
。如果不使用箭头函数或bind()
,this
会指向onProgress
函数的上下文,而不是 Vue 实例。 -
使用
this.$refs
访问 DOM 元素:你在myupload.uploadedSize
中使用了this.$refs.MyUploader
来访问 Vue 模板中的 DOM 元素。
总结
通过使用箭头函数确保 this
正确指向 Vue 实例,你可以在 onProgress
函数中访问并修改 data
中的变量。如果你不想使用箭头函数,也可以使用 bind()
来显式绑定 this
,但箭头函数更为简洁。