这个。在 dropzone 成功回调 vuejs2 中未定义

this. undefined inside dropzone success callback vuejs2

我正在使用 Dropzone.js 和 Vuejs2。文件上传工作正常,但是在 success 回调函数中我无法将响应分配给父对象。

这是我的实施示例:

<script>
    import vueDropzone from "vue2-dropzone";

      export default {
        components: {
          vueDropzone
        },
        props: {
        },
        data: () => ({
            data: {
              name: ''
            },
            dropOptions: {
                url: "https://httpbin.org/post",
                maxFileSize: 10,
                autoProcessQueue: false,
                success: (file, response) => {
                if (response.message == "success"){
                  this.data.name = response.name;                
                  this.add();
                }
                else{
                  console.log('Error Uploading file');
                }
           }
       }),
     };
</script>

错误是:

Uncaught TypeError: Cannot set property 'name' of undefined

我尝试了 找到的解决方案,但仍然无法正常工作。

这根本行不通,因为 this 绑定到的对象超出您的想象。这是人们切换或学习的一些默认错误 JavaScript。

dropOptions 是一个对象。 success 函数中的 this 指的是 dropOptions 对象而不是它的父对象。

所以 dropOptions 没有字段 data 因此是 undefined 并且您无法访问 name.

参见:access parent object in javascript

编辑:为了进一步调查,请提供一些代码,说明您对发布的 link 所做的操作。这似乎朝着正确的方向发展,但从一个简单的 "does not work" 来看,我们无法告诉您还需要记住什么。

看着 documentation,你用错了。

dropOptions 应该只包含它的 configuration,而不是事件。

您需要使用 vue-2-dropzones events,在您的情况下 vdropzone-success(file, response),所以:

<vue-dropzone
  ref="myVueDropzone"
  id="dropzone"
  :options="dropOptions"
  v-on:vdropzone-success="someSuccessMethod">
</vue-dropzone>

...
data() { /* ... */ },
methods: {
  someSuccessMethod(file, response) {
    // your logic
  }
}