vue2项目使用wangEditor富文本插件

        最近在vue2项目中使用了富文本插件wangEditor实现了基本功能以及图片上传,官方文档地址:安装 | wangEditor。用这篇文章记录一下在使用过程踩到的坑和解决的问题。

vue2安装命令:

npm install @wangeditor/editor-for-vue --save

 引入样式:

<style src="@wangeditor/editor/dist/css/style.css"></style>
主要api:

获取富文本编辑器中的内容:editor.getHtml()

清空富文本编辑器中的内容:editor.clear()

主要属性:

readOnly(只读属性,因为项目中涉及富文本的展示,这时是只读状态)

autoFocus(取消自动聚焦,因为富文本编辑器默认会自动聚焦)

2023.7.27更新:(项目中富文本编辑器又增加了新的需求:上传附件)

下载插件:npm install @wangeditor/plugin-upload-attachment

引入:

import { Boot } from '@wangeditor/editor'
Boot.registerModule(attachmentModule)
创建WangEdit.vue公共文件,主要内容:
<template>
  <div style="border: 1px solid #ccc">
    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
    <Editor
      style="height: 500px; overflow-y: hidden"
      :value="myHtml"
      :defaultConfig="editorConfig"
      :mode="mode"
      @onCreated="onCreated"
    />
  </div>
</template>
<script>
import Vue from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'

export default Vue.extend({
  components: { Editor, Toolbar },
  data() {
    return {
      editor: null,
      myHtml: '',
      toolbarConfig: {
// 插入哪些菜单
        insertKeys: {
           index: 21, // 自定义插入的位置
           keys: ['uploadAttachment'], // “上传附件”菜单
        },
        excludeKeys: [
          // 排除菜单组,写菜单组 key 的值即可
          'group-video', //去掉视频
          'fullScreen',
          'insertTable',
          'insertImage',
        ],
      },
      mode: 'default', // or 'simple'
      editorConfig: {
        placeholder:'',
        MENU_CONF: {
          uploadImage: {
            customUpload: this.uploadImg,
          },
          // “上传附件”菜单的配置
          uploadAttachment: {
            server: '', // 服务端地址
            timeout: 5 * 1000, // 5s
            fieldName: 'file',
            meta: { token: 'xxx', a: 100 }, // 请求时附加的数据
            metaWithUrl: true, // meta 拼接到 url 上
            headers: {
            token: Vue.prototype.localData.ss.get('ACCESS_TOKEN'),
            },
            onFailed(file, res) {
              alert(res.message)
              console.log('onFailed', file, res)
            },
            onError(file, err, res) {
              alert(err.message)
              console.error('onError', file, err, res)
            },
            onBeforeUpload(file) {
              // 判断前面是否有空行
              return file // 上传 file 文件
            },
              // 上传成功后,用户自定义插入文件
            customInsert(res, file, insertFn) {
              // const { url } = res.data || {}
              // if (!url) throw new Error(`url is empty`)
              // 插入附件到编辑器
              insertFn(file.name, `/dfs/${res.data}`)
             },
           },
         },
         hoverbarKeys: {
           attachment: {
             menuKeys: ['downloadAttachment'], // “下载附件”菜单
           },
         },
        autoFocus: false,
        readOnly: this.readOnly,
      },
      uploadConfig: {
        api: '', //上传图片的地址
        headers: {
          token: '', 上传图片需要携带的token
        },
      },
    }
  },
  props: ['myHtml', 'readOnly'],
  methods: {
    onCreated(editor) {
      this.editor = Object.seal(editor) // 一定要用 Object.seal() ,否则会报错
    },
    uploadImg(file, insertFn) {
      let imgData = new FormData()
      imgData.append('file', file)
      axios({
        url: this.uploadConfig.api,
        method: 'post',
        data: imgData,
      }).then((response) => {
        console.log(response, 'response')
        if (response.data.code == 0) {
          insertFn('/dfs/' + response.data.data)
        } else {
          this.$message.warning('上传失败')
        }
      })
    },
  },
  mounted() {
    // 模拟 ajax 请求,异步渲染编辑器
    // setTimeout(() => {
    //   this.html = '<p>模拟 Ajax 异步设置内容 HTML</p>'
    // }, 1500)
  },
  beforeDestroy() {
    const editor = this.editor
    if (editor == null) return
    editor.destroy() // 组件销毁时,及时销毁编辑器
  },
})

        另外,wangEditor在使用过程中会与antd输入框事件冲突,只需要把Editor中的v-model改为:value,同时使用api来获取富文本编辑器内容就可以解决这个问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值