vue2-dropzone 与 vue3 兼容吗?

Posted

技术标签:

【中文标题】vue2-dropzone 与 vue3 兼容吗?【英文标题】:Is vue2-dropzone compatible with vue3? 【发布时间】:2021-07-25 19:08:36 【问题描述】:

vue2-dropzone 适用于 vue2,但不适用于 vue3。

使用以下代码

import vue2Dropzone from 'vue2-dropzone'
import 'vue2-dropzone/dist/vue2Dropzone.min.css'

return 
  dropzoneOptions: 
     autoProcessQueue: false,
         addRemoveLinks: true,
         url: this.url,
         headers: 
             'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
         ,
     ,
     id: null,
     myDropZone: null,
     supervisorError: ''
  

我确实有以下错误

TypeError: 无法读取未定义 vue3 的属性 '_c'

【问题讨论】:

嗨,我的回答有帮助吗? 【参考方案1】:

vue3-dropzone

你追求的是vue3-dropzone。

它的工作方式与你们大多数人可能已经在 vue2 中使用的 vue2-dropzone 包非常相似。我自己是新的 vue3-dropzone 包的贡献者之一。我刚刚为那些想要一次保存多个文件的人添加了示例代码,如下所示:

保存多个文件的示例

<template>
      <div>
        <div v-bind="getRootProps()">
          <input v-bind="getInputProps()" />
          <p v-if="isDragActive">Drop the files here ...</p>
          <p v-else>Drag 'n' drop some files here, or click to select files</p>
        </div>
        <button @click="open">open</button>
      </div>
</template>
    
<script>
    import  useDropzone  from "vue3-dropzone";
    import axios from "axios";
    
    export default 
      name: "UseDropzoneDemo",
      setup() 
        const url = "your_url"; // Your url on the server side
        const saveFiles = (files) => 
          const formData = new FormData(); // pass data as a form
          for (var x = 0; x < files.length; x++) 
            // append files as array to the form, feel free to change the array name
            formData.append("images[]", files[x]);
          
    
          // post the formData to your backend where storage is processed. In the backend, you will need to loop through the array and save each file through the loop.
    
          axios
            .post(url, formData, 
              headers: 
                "Content-Type": "multipart/form-data",
              ,
            )
            .then((response) => 
              console.info(response.data);
            )
            .catch((err) => 
              console.error(err);
            );
        ;
    
        function onDrop(acceptFiles, rejectReasons) 
          saveFiles(acceptFiles); // saveFiles as callback
          console.log(rejectReasons);
        
    
        const  getRootProps, getInputProps, ...rest  = useDropzone( onDrop );
    
        return 
          getRootProps,
          getInputProps,
          ...rest,
        ;
      ,
    ;
</script>

【讨论】:

【参考方案2】:

如本文所述:https://github.com/rowanwins/vue-dropzone/issues/578

看起来vue-dropzone 目前不支持 Vue3,我的意思是 mantainer 已经在努力管理 vue 2 并寻求帮助,所以它看起来是合法的。

也许可以看看这个 vue3 的:https://github.com/Yaxian/vue3-dropzone


以下是可用替代方案的列表:https://github.com/vuejs/awesome-vue#drag-and-drop

【讨论】:

【参考方案3】:

好吧,我们将这个包用于我们的生产构建:

Vue3 库组件,用于通过图像预览进行拖放文件上传。 https://github.com/darknessnerd/drop-zone

【讨论】:

以上是关于vue2-dropzone 与 vue3 兼容吗?的主要内容,如果未能解决你的问题,请参考以下文章

手动添加文件时的Vue2-Dropzone流程表单

vue2能用vue3封装的组件

docker build vue3 与 node:16-buster-slim 上的 element-ui 不兼容

vue3中一些不兼容的小改变

vue3中组件的非兼容变更

Vue3中模板指令的非兼容变更