wangeditor在vue中的组件封装以及图片上传功能实现

  1. wangeditor官网icon-default.png?t=LA92https://www.wangeditor.com/doc/
  2. 依赖下载:
    cnpm install wangeditor --save
  3. 组件封装
    <template>
      <div :class="prefixCls">
        <div ref="editor" class="editor-wrapper"></div>
      </div>
    </template>
    
    <script>
    import { baseUrl } from '../../api/url'
    import WEditor from 'wangeditor'
    export default {
      props: {
        prefixCls: {
          type: String,
          default: 'my-editor'
        },
        value: {
          type: String,
          default: ''
        },
        isClear: {
          type: Boolean
        }
      },
      data() {
        return {
          editor: null,
          editorContent: 'getEditor'
        }
      },
      watch: {
        isClear(val) {
          // 触发清除文本域内容
          if (val) {
            this.editor.txt.clear()
            this.editorContent = null
          }
        }
      },
      mounted() {
        this.initEditor()
        this.setText()
      },
      methods: {
        // 获取文本内容
        getText() {
          this.editor.txt.text(this.editorContent)
        },
        // 设置文本内容
        setText(val) {
          this.editor.txt.html(val)
        },
        /**
         * @name:组件初始化
         */
        initEditor() {
          this.editor = new WEditor(this.$refs.editor)
          this.editor.config.uploadImgServer =
           baseUrl + '上传接口'
          this.editor.config.uploadFileName = 'file' // 上传参数
          this.editor.config.onchange = (newHtml) => {
            this.editorContent = newHtml
            this.$emit('change', this.editorContent) // 将内容同步到父组件中
          }
          this.editor.config.uploadImgMaxSize = 50 * 1024 * 1024 // 50M
          this.editor.config.pasteIgnoreImg = true // 忽略粘贴的图片
          this.editor.config.uploadImgHooks = {
            customInsert: function (insertImgFn, result) {
              var response = result.data[0]
              let dowUrl =
               baseUrl + '下载接口'+?fileName=' +
                response.fileSaveName +
                '&filePath=' +
                response.filePath
              insertImgFn(dowUrl)
            }
          }
          this.editor.config.zIndex = 999 // 配置富文本的权重 不然会覆盖其他组件
          this.editor.create()
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    .my-editor {
      .editor-wrapper {
        text-align: left;
      }
    }
    </style>
    
  4. 页面中使用
    <template>
      <div class="">
        <editor-bar
          v-model="content"
          @change="getEditor"
          ref="weditor"
        ></editor-bar>
      </div>
    </template>
    
    <script>
    import EditorBar from "../../components/wangEditor.vue";
    export default {
      components: {
        EditorBar,
      },
      data() {
        return {
          content: "hhhhhhh"
        };
      },
      computed: {},
      methods: {    // 获取富文本内容
        getEditor(value) {
          console.log(value);
          this.content = value;
        }  },
      mounted() {
        this.getEditor();
        this.$refs.weditor.setText("hhh");  },
    };
    </script>
    
    <style lang="scss" scoped></style>
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下使用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指令绑定了组件的值,以便在父组件获取和更新该值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值