轻量级富文本编辑器wangEditor结合vue使用方法示例

yizhihongxing

下面是关于“轻量级富文本编辑器wangEditor结合vue使用方法示例”的完整攻略:

简介

wangEditor 是一个轻量级的基于javascript开发的富文本编辑器,使用方便、功能强大,适合于各种类型的Web项目。本文将讲解如何在vue项目中使用wangEditor.

安装 wangEditor 和 vue

首先需要在项目中安装wangEditor和vue,可以通过npm进行安装:

npm install wangeditor --save
npm install vue --save

安装完毕后,在项目中引入wangEditor和vue:

import Vue from 'vue'
import WangEditor from 'wangeditor'

在组件中使用 wangEditor

在vue的组件中可以使用wangEditor,我们可以在 vue 的 mounted 生命周期函数中初始化编辑器。

<template>
  <div>
    <div ref="editor" id="editor"></div>
  </div>
</template>

<script>
export default {
  mounted() {
    let editor = new WangEditor(this.$refs.editor)

    // 配置编辑器相关选项
    editor.config.menus = ['bold', 'underline', 'italic', 'head', 'link', 'list', 'justify']
    editor.create()
  }
}
</script>

在上述示例代码中,我们在mounted生命周期函数中使用this.$refs.editor获取到我们在模板中定义的div节点。然后,我们实例化一个WangEditor对象,并配置了编辑器相关选项。最后,我们调用了editor.create()方法,使编辑器在文档加载完后进行初始化。

获取编辑器中的内容

编辑器初始化完毕,我们可以使用editor.txt.text()方法来获取编辑器中的纯文本内容,使用editor.txt.html()方法来获取编辑器中的html文本内容。

<template>
  <div>
    <div ref="editor" id="editor"></div>
    <p>纯文本内容:{{ content.text }}</p>
    <p>html文本内容:{{ content.html }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: {
        text: '',
        html: ''
      }
    }
  },
  mounted() {
    let _this = this;
    let editor = new WangEditor(this.$refs.editor)

    editor.config.menus = ['bold', 'underline', 'italic', 'head', 'link', 'list', 'justify']
    editor.onchange = function() {
      _this.content = {
        text: editor.txt.text(),
        html: editor.txt.html()
      }
    }
    editor.create()
  }
}
</script>

在上述示例代码中,我们通过监听editoronchange事件,当编辑器内容发生改变时,我们可以使用editor.txt.text()editor.txt.html()方法获取编辑器中的内容并保存到content对象中。然后,在模板中显示这些内容。

配置编辑器中的图片上传

默认情况下,wangEditor中并没有自带图片上传的功能,需要进行自定义配置来实现。这里我给出一个简单的示例来演示如何使用vue和wangEditor实现图片上传。

<template>
  <div>
    <div ref="editor" id="editor"></div>
  </div>
</template>

<script>
export default {
  mounted() {
    let editor = new WangEditor(this.$refs.editor)
    let _this = this;

    editor.config.uploadImgServer = 'http://localhost:4000/upload' // 后端接口上传图片
    editor.config.uploadImgLimit = 5 // 上传图片数量限制
    editor.config.uploadImgHooks = {
      customInsert: function(insertImgFn, result, editor) {
        let imgUrl = result.data.url
        editor.cmd.do('insertHtml', `<img src="${imgUrl}" style="max-width:100%;"/>`)
      }
    }

    editor.create()

    // 图片上传
    editor.$txt.on('change keyup', function() {
      let imgs = _this.$refs.editor.querySelectorAll('img')
      if (imgs && imgs.length > 0) {
        for (let i = 0; i < imgs.length; i++) {
          if (imgs[i].hasAttribute('data-file-id')) {
            continue
          }
          imgs[i].setAttribute('data-file-id', i + 1)
          let formData = new FormData()
          formData.append('file', imgs[i].src)
          formData.append('id', `${i + 1}`)
          _this.uploadImg(formData) 
        }
      }
    })
  },

  methods: {
    uploadImg(formData) {
      let _this = this
      this.$axios.post('http://localhost:4000/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }).then(resp => {
        let res = resp.data
        if (res.status === 0) {
          _this.$message({message: res.msg, type: 'success'})
          let img = _this.$refs.editor.querySelectorAll(`img[data-file-id="${res.fileId}"]`)
          if (img) {
            img[0].removeAttribute('data-file-id')
            img[0].src = res.data.url
          }
        } else {
          _this.$message({message: res.msg, type: 'error'})
        }
      })
    }
  }
}
</script>

在上述代码中,我们通过设置uploadImgServer配置项来实现图片上传,函数属性uploadImgHooks提供了自定义插入图片回调函数的接口,可以利用该函数将上传的图片解析后加入到编辑器中。可以根据需求来自定义这个函数实现插入图片的逻辑。

总结

至此,我们已经学习了如何使用wangEditor在vue项目中进行富文本编辑器的开发,并且实现了文本编辑器中插入图片的功能。wangEditor是一款比较好上手、提供了比较多扩展接口的富文本编辑器,使用方便,值得推荐。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:轻量级富文本编辑器wangEditor结合vue使用方法示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue自定义指令用法经典实例小结

    下面是“vue自定义指令用法经典实例小结”的完整攻略: 什么是Vue自定义指令 Vue自定义指令是指Vue.js提供的一种扩展语法,通过它可以自定义具有特定功能的指令,例如自定义一个v-focus指令,用来设置DOM元素获得焦点,而不需要在Vue组件的methods中定义一堆逻辑代码。 Vue自定义指令的两种类型 Vue自定义指令分为两种类型: 全局指令:作…

    Vue 2023年5月27日
    00
  • 基于vue v-for 多层循环嵌套获取行数的方法

    要在Vue的模板中多层循环嵌套并获取每层循环的行数,可以使用如下的方法: <template> <div> <div v-for="(group, index) in groups" :key="index"> <div v-for="(item, i) in gro…

    Vue 2023年5月28日
    00
  • 详解Vue 普通对象数据更新与 file 对象数据更新

    详解Vue 普通对象数据更新与 file 对象数据更新 在Vue中,我们可以通过v-model指令来进行表单元素的双向数据绑定,其中包括普通对象数据更新和file对象数据更新。 1.普通对象数据更新 在Vue中,普通对象数据更新非常简单,只需要在Vue实例中定义data数据,然后在需要进行绑定的表单元素上使用v-model指令即可。以下是一个简单的示例,展示…

    Vue 2023年5月28日
    00
  • vue-echarts如何实现图表组件封装详解

    接下来我将为你详细讲解“vue-echarts 如何实现图表组件封装详解”的完整攻略。 1. 理解 Vue-Echarts 在封装 Vue Echarts 图表组件之前,我们需要先理解 Vue Echarts 是什么,以及它可以帮我们解决什么问题。 Vue Echarts 是一个将 Echarts 封装成 Vue.js 组件的库,它可以轻松在 Vue.js …

    Vue 2023年5月28日
    00
  • Pinia入门学习之实现简单的用户状态管理

    首先,我们需要了解什么是Pinia。Pinia是一款为Vue 3提供状态管理的插件,它是基于Vue 3 Reactivity API协议实现的,提供了强大的响应式状态管理功能,使得在Vue 3项目开发中可以更方便地进行状态管理。 下面,我们来详细讲解如何使用Pinia来实现简单的用户状态管理。步骤如下: 1. 安装Pinia 在Vue 3项目中,首先需要安装…

    Vue 2023年5月28日
    00
  • 新手vue构建单页面应用实例代码

    下面是详细讲解“新手vue构建单页面应用实例代码”的完整攻略。 1. 创建基于Vue的项目 首先,我们需要安装Vue的脚手架工具vue-cli。安装命令如下: npm install -g vue-cli 安装完成之后,我们可以使用vue init命令来生成一个基于Vue的项目。具体命令如下: vue init webpack my-app 其中,“my-a…

    Vue 2023年5月27日
    00
  • Vue实现Excel本地下载及上传的方法详解

    下面就为您详细讲解“Vue实现Excel本地下载及上传的方法详解”。 1. Excel文件下载 1.1 安装FileSaver和XLSX FileSaver是一个用于将Blob和File对象保存到本地的JavaScript库,而XLSX则是一个解析和生成Excel文件的JavaScript库。使用npm安装这两个库: npm install file-sav…

    Vue 2023年5月28日
    00
  • ESLint 是如何检查 .vue 文件的

    ESLint是一个开源的JavaScript代码检查工具,可以用于检查JavaScript、JSX和Vue等类型的文件。ESLint在检查.vue文件时,主要是借助eslint-plugin-vue插件来实现的。 具体而言,ESLint在检查.vue文件时,需要额外配置一些参数来让它正常工作。以下是基本的配置: { "plugins": …

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部