wangEdit大致使用

2023-11-05

1、先导入,两种方式任选其一

yarn add @wangeditor/editor-for-vue@next
npm install @wangeditor/editor-for-vue@next --save

2、创建富文本框组件,以下是vue3.0的写法,万变不离其宗,大概改改就行了,注释也写进去了

<template>
  <div>
    <div style="border: 1px solid #ccc; margin-top: 10px">
      <Toolbar
        :default-config="toolbarConfig"
        :editor="editorRef"
        style="border-bottom: 1px solid #ccc"
      />
      <Editor
        v-model="valueHtml"
        :default-config="editorConfig"
        style="height: 400px; overflow-y: hidden"
        @custom-alert="customAlert"
        @custom-paste="customPaste"
        @on-blur="handleBlur"
        @on-change="handleChange"
        @on-created="handleCreated"
        @on-destroyed="handleDestroyed"
        @on-focus="handleFocus"
      />
    </div>
  </div>
</template>

<script>
  import '@wangeditor/editor/dist/css/style.css'
  import {
    onBeforeUnmount,
    ref,
    shallowRef,
    onMounted,
    toRefs,
    watch,
    nextTick,
  } from 'vue'
  import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
  // import { IEditorConfig } from '@wangeditor/editor'
  import { ElMessage } from 'element-plus'
  import { fileUploadImage } from '@/api/activityrelease/activityreleaseApi.js'

  export default {
    components: { Editor, Toolbar },
    props: {
      content: { // 所要绑定的内容
        type: String,
        default: '',
      },
    },
    emits: ['changeEdit'], // 导出最新数据,每次编辑之后的数据
    setup(props, { emit }) {
      const { content } = toRefs(props)
      // 编辑器实例,必须用 shallowRef,重要!
      const editorRef = shallowRef()

      // 内容 HTML
      const valueHtml = ref('')

      // 获取内容
      onMounted(() => {
        setTimeout(() => {
          nextTick(() => {
            valueHtml.value = content.value
          })
        }, 1500)
      })
      watch(
        () => content.value,
        (val) => {
          valueHtml.value = val
        }
      )

      const toolbarConfig = {
        excludeKeys: [
          'insertVideo',
          'uploadVideo',
          'group-video',
          'insertImage',
          'fullScreen',
        ],
      }
      const editorConfig = {
        placeholder: '请输入内容...',
        MENU_CONF: {
          // 配置上传图片
          uploadImage: {
            async customUpload(file, insertFn) {
              const form = new FormData()
              form.append('file', file)
              await fileUploadImage(form).then((res) => {
                if (res.code != 200)
                  ElMessage({ type: 'warning', message: res.msg })
                let url = res.data
                insertFn(url) //将图片插入编辑器
              })
            },
          },
        },
      }
      // 组件销毁时,也及时销毁编辑器,重要!
      onBeforeUnmount(() => {
        const editor = editorRef.value
        if (editor == null) return
        editor.destroy()
      })

      // 编辑器回调函数
      const handleCreated = (editor) => {
        editorRef.value = editor // 记录 editor 实例,重要!
        nextTick(() => {
          valueHtml.value = content.value
        })
      }
      const handleChange = (editor) => {
        // 举例
        let text = getText(editor.getHtml())
        isNull(text)
          ? emit('changeEdit', '')
          : emit('changeEdit', editor.getHtml())
      }
      const handleDestroyed = () => {
        console.log('destroyed')
      }
      const handleFocus = () => {
        console.log('focus')
      }
      const handleBlur = () => {
        console.log('blur')
      }
      const customAlert = (info, type) => {
        console.log(`【自定义提示】${type} - ${info}`)
      }
      const customPaste = (editor, event, callback) => {
        console.log('ClipboardEvent 粘贴事件对象', editor, event)
        // 自定义插入内容
        // editor.insertText('xxx')
        // 返回值(注意,vue 事件的返回值,不能用 return)
        callback(true) // 返回 false ,阻止默认粘贴行为
        // callback(true) // 返回 true ,继续默认的粘贴行为
      }

      // 判断富文本编辑器输入是否为空或回车
      const getText = (str) => {
        return str
          .replace(/<[^<p>]+>/g, '') // 将所有<p>标签 replace ''
          .replace(/<[</p>$]+>/g, '') // 将所有</p>标签 replace ''
          .replace(/&nbsp;/gi, '') // 将所有 空格 replace ''
          .replace(/<[^<br/>]+>/g, '') // 将所有 换行符 replace ''
      }
      const isNull = (str) => {
        if (str == '') return true
        var regu = '^[ ]+$'
        var re = new RegExp(regu)
        return re.test(str) // true表示判空  false表示不为空
      }
      return {
        editorRef,
        valueHtml,
        toolbarConfig,
        editorConfig,
        handleCreated,
        handleChange,
        handleDestroyed,
        handleFocus,
        handleBlur,
        customAlert,
        customPaste,
        getText,
        isNull,
      }
    },
  }
</script>

3、使用方法

// 引入组件
  import EditContent from '@/vab/components/editContent/index.vue'

// 注册组件
  components: { EditContent },
 
 // 使用组件
<EditContent :content="submitData.activitySynopsis" @change-edit="changeDescribe" />

	// 更新最新内容
      const changeDescribe = (value) => {
        state.submitData.activitySynopsis = value
      }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wangEdit大致使用 的相关文章

  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea

随机推荐

  • ElasticSearch条件查询,高亮查询,聚合查询,以及映射关系

    1 在上一篇文章中我们已经做过了创建索引和简单的文档数据的增删改查 今天我们的核心是文档数据的查询 当然在后期我们也会用java数据来操作数据 上一期 我们的索引库是shopping 今天我们再来回忆一下 这就是查询索引库中 所有的信息 接
  • 使用electron 将网页打包成应用程序

    需求 将一个已经上线的后台管理系统 只兼容Chrome 打包成一个不需要谷歌浏览器就可以运行的软件 需要安装 npm install electron g npm install electron packager g WinRAR解压工具
  • 最高分数的学生姓名

    include
  • JDBC第三讲

    目录 三 Dao模式 1 Dao模式概念 2 Dao模式的组成 3 具体代码 3 1 BaseDao 3 2 Dao接口 3 3 Dao接口的实现 3 4 实体类 3 5 测试类 三 Dao模式 1 Dao模式概念 前面我们在使用JDBC时
  • Jetpack学习之MVVM实战

    MVVM架构与Jetpack MVVM即Model View ViewModel的缩写 它的出现是为了将图形界面与业务逻辑 数据模型进行解耦 MVVM也是Google推崇的一种Android项目架构模型 而Jetpack组件 大部分是为了能
  • 小干货:Linux 系统的备份恢复

    作者 LeoLan s Blog https reurl cc gm5ZkQ tar 命令 副本 本机备份整个系统 以后还原还是还原到本机 注意根目录下要有充足的可用空间用于备份 cd tar gz格式 tar cvpzf system b
  • visual studio 2019账号登陆不上去问题解决

    网上多数解决方案是选择账户选项 然后把嵌入式web改为系统式web 但我用打开登陆选项 发现我就是系统式web 所以此方法行不通 但我观察到登陆选项中有设备代码选项 于是我就选了此选项 然后选择了登陆 此时它跳出来一个选项 根据提示只要在另
  • 单片机——独立按键控制

    1 基本定义与初始化 include
  • 2021秋招复习——计算机网络

    文章目录 总流程 浏览器缓存 资源缓存的位置 三级缓存原理 浏览器缓存的分类 强缓存 协商缓存 Last Modify If Modify Since ETag If None Match 浏览器缓存的优点 DNS 什么是DNS DNS解析
  • 边缘检测Sobel、laplacian、canny算子

    1 图像边缘检测 图像边缘检测对于分析图像中的内容 实现图像中物体的分割 定位等具有重要的作用 边缘检测大大减少了源图像的数据量 剔除了与目标不相干的信息 保留了图像重要的结构属性 常用的图像边缘检测方法分为以下两种 一阶导数的边缘算子 通
  • Linux PWM 驱动实验

    一 PWM 驱动简析 1 设备树下的 PWM 控制器节点 I MX6ULL 有 8 路 PWM 输出 因此对应 8 个 PWM 控制器 所有在设备树下就有 8 个PWM 控制器节点 这 8 路 PWM 都属于 I MX6ULL 的 AIPS
  • [Codeforces] combinatorics (R1600) Part.7

    Codeforces combinatorics R1600 Part 7 题单 https codeforces com problemset tags combinatorics 1201 1600 1534C Little Alawn
  • 用Python爬虫技术怎么挣点小钱,这四种方法可行

    提醒 抓取的数据如果要商业化 要小心知识产权问题噢 还要提醒一点 抓取和处理这些数据的代价要小于人工处理的代价 使用爬虫代替人工才有价值 我利用Python爬虫技术赚点小钱方式 在正式聊Python爬虫技术之前 先来说说挣钱的事 说说作为一
  • react组件的render方法

    一个组件类必须要实现一个 render 方法 这个 render 方法必须要返回一个 JSX 元素 必须要用一个外层的 JSX 元素把所有内容包裹起来 返回并列多个 JSX 元素是不合法的 错误的写法 render return div 第
  • 计算机显示丢失d3dcompiler,无法启动此程序提示缺少d3dcompiler文件怎么解决

    有用户说他在打开某个程序时 系统却提示说无法启动此程序提示缺少d3dcompiler文件的情况 这可能是在系统更新时出现错误导致的 那么无法启动此程序提示缺少d3dcompiler文件怎么解决呢 很简单安装一个更新包即可解决 下面小编给大家
  • [培训-无线通信基础-7]:信道均衡器(信道估计、信道均衡)

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118832368 目录 引言
  • FFT算法(Java实现)

    FFT导论 转载自FFT导论 FFT是离散傅立叶变换的快速算法 可以将一个信号变换到频域 有些信号在时域上是很难看出什么特征的 但是如果变换到频域之后 就很容易看出特征了 这就是很多信号分析采用FFT变换的原因 另外 FFT可以将一个信号的
  • 通过Java操作Kafka

    通过Java操作Kafka 前置知识 https editor csdn net md articleId 125883056 创建maven项目 导入kafka客户端依赖
  • C#生成二进制文件

    文章目录 用C 将文本MAC地址生成二进制文件 使用C 将字符串生成二进制文件 为什么用C 来开发这个简单的上位机 用C 将文本MAC地址生成二进制文件 using System using System Collections Gener
  • wangEdit大致使用

    1 先导入 两种方式任选其一 yarn add wangeditor editor for vue next npm install wangeditor editor for vue next save 2 创建富文本框组件 以下是vue