vue3 wangEditor富文本自定义上传本地图片

Vue3和WangEditor都提供了上传本地图片的功能,可以结合使用实现自定义上传本地图片。

首先,在Vue3中,我们可以使用 onFileChange 事件来监听文件选择器的变化,获取到选中的本地图片文件。然后,将这个文件传递给WangEditor,让WangEditor进行上传。

在WangEditor中,我们可以通过配置 uploadImgServeruploadImgParams 来实现上传本地图片。其中,uploadImgServer 是图片上传接口地址,uploadImgParams 是图片上传时需要传递的参数。我们可以将Vue3中获取到的本地图片文件传递给 uploadImgParams 中,再提交到服务器进行上传。

以下是一个简单的实现示例:

<template>
  <div class="editor-wrapper">
    <div ref="editorElem" class="editor"></div>
    <input type="file" ref="fileInput" @change="onFileChange">
  </div>
</template>

<script>
import WangEditor from 'wangeditor'

export default {
  mounted() {
    // 初始化WangEditor
    const editor = new WangEditor(this.$refs.editorElem)

    // 配置图片上传接口地址
    editor.config.uploadImgServer = 'http://xxx/upload'
    
    // 配置图片上传时需要传递的参数
    editor.config.uploadImgParams = {
      file: null // file字段用于接收本地图片文件
    }

    // 自定义上传方法,将上传的文件传递给WangEditor
    editor.config.customUploadImg = function (files, insertImgFn) {
      const formData = new FormData()
      formData.append('file', files[0])
      this.uploadImgParams.file = files[0]
      const xhr = new XMLHttpRequest()
      xhr.open('POST', this.uploadImgServer, true)
      xhr.onload = function (e) {
        if (xhr.status === 200) {
          const response = JSON.parse(xhr.responseText)
          insertImgFn(response.data.url) // 插入图片
        }
      }
      xhr.send(formData)
    }

    // 创建编辑器
    editor.create()
  },
  methods: {
    onFileChange(e) {
      const file = e.target.files[0]
      const editor = WangEditor.getEditor(this.$refs.editorElem)
      editor.uploadImgParams.file = file // 将获取到的本地图片文件传递给WangEditor的上传参数
      editor.uploadImg() // 调用WangEditor的上传图片方法
      this.$refs.fileInput.value = '' // 重置文件选择器的值,以便下一次选择
    }
  }
}
</script>

<style scoped>
.editor-wrapper {
  position: relative;
}
.editor {
  height: 500px;
}
.file-input {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  width: 0;
  height: 0;
  pointer-events: none;
}
</style>

在这个示例中,我们在Vue3中创建了一个WangEditor实例,并进行了相关配置。在自定义上传方法 customUploadImg 中,我们获取到了本地图片文件,并将其传递给了 uploadImgParams 中的 file 字段,然后通过XMLHttpRequest进行上传。在 onFileChange 事件中,我们监听了文件选择器的变化,获取到选中的本地图片文件,并调用了WangEditor的上传图片方法。最后,我们重置了文件选择器的值,以便下一次选择。

需要注意的是,本示例中只演示了如何上传单张图片。如果要支持多张图片上传,需要在 uploadImgParams 中传递一个文件数组,然后在 customUploadImg 方法中循环遍历上传每一张图片。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您介绍一下使用Vue3封装WangEditor富文本组件的步骤。 首先,我们需要安装WangEditorVue3,可以通过以下命令进行安装: ```bash npm install wangeditor@latest npm install vue@next ``` 接着,我们可以在Vue3的组件中使用WangEditor。下面是一个简单的示例: ```vue <template> <div ref="editorElem"></div> </template> <script> import WangEditor from 'wangeditor' export default { mounted() { const editor = new WangEditor(this.$refs.editorElem) editor.create() } } </script> ``` 在上面的代码中,我们通过import导入了WangEditor,并在mounted钩子函数中创建了一个新的编辑器实例。注意,我们需要在组件的模板中添加一个ref属性,用于引用编辑器的DOM元素。 如果您需要进一步封装WangEditor组件,可以考虑将其封装为一个Vue组件,以便在其他地方重复使用。下面是一个简单的示例: ```vue <template> <div :id="editorId"></div> </template> <script> import WangEditor from 'wangeditor' export default { props: { value: String, placeholder: String, height: { type: String, default: '300px' } }, data() { return { editorId: `editor-${Math.random().toString(36).substr(2, 9)}`, editor: null } }, mounted() { this.editor = new WangEditor(`#${this.editorId}`) this.editor.config.height = this.height this.editor.config.placeholder = this.placeholder this.editor.config.onchange = this.handleChange this.editor.create() this.editor.txt.html(this.value) }, methods: { handleChange() { this.$emit('input', this.editor.txt.html()) } }, beforeUnmount() { this.editor.destroy() } } </script> ``` 在上面的代码中,我们定义了一个WangEditor组件,并通过props接收了一些参数,包括组件的初始值、占位符和高度等。在mounted钩子函数中,我们创建了一个新的编辑器实例,并通过config属性设置了一些编辑器的配置项,包括高度、占位符和内容变化时的回调函数等。我们还通过handleChange方法监听了编辑器内容的变化,并通过$emit方法向父组件发送了一个input事件,以便在父组件中更新组件的绑定值。最后,我们在beforeUnmount钩子函数中销毁了编辑器实例,以避免内存泄漏。 使用时,您可以像使用其他自定义组件一样,在Vue3的模板中引用WangEditor组件,并通过v-model指令绑定组件的值: ```vue <template> <div> <wangeditor v-model="content" placeholder="请输入内容" height="500px" /> <div>{{ content }}</div> </div> </template> <script> import WangEditor from '@/components/WangEditor.vue' export default { components: { WangEditor }, data() { return { content: '' } } } </script> ``` 在上面的代码中,我们通过import导入了WangEditor组件,并在模板中引用了该组件。我们还通过v-model指令绑定了组件的值,以便在父组件中获取和更新该值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值