开发者问题收集

this.undefined 在 dropzone 成功回调 vuejs2 中

2018-11-09
1020

我正在将 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

我尝试了 这里 找到的解决方案,但仍然不起作用。

2个回答

查看 文档 ,您使用错了。

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

您需要使用 vue-2-dropzones 事件 ,在您的情况下为 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
  }
}
Vucko
2018-11-09

这根本不起作用,因为 this 绑定到了您想象不到的另一个对象。这是人们切换或学习 JavaScript 时出现的默认错误。

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

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

请参阅: 在 javascript 中访问父对象

编辑:为了进一步调查,请提供您对发布的链接所做操作的一些代码。这似乎是朝着正确的方向发展,但从简单的“不起作用”来看,我们无法告诉您还需要注意什么。

Enak
2018-11-09