首页 > 其他分享 >富文本编辑器wangEditor的基本使用

富文本编辑器wangEditor的基本使用

时间:2024-10-11 16:48:35浏览次数:12  
标签:基本 文本编辑 菜单 return wangEditor value editor insertField console

首先,为大家献上原地址链接    wangEditor,如果要更深层的去使用,可以去看里面的高级功能,好的。不多说了,开始使用,项目还是老套的vue2,先去使用npm去下载编辑器

yarn add @wangeditor/editor
# 或者 npm install @wangeditor/editor --save

yarn add @wangeditor/editor-for-vue
# 或者 npm install @wangeditor/editor-for-vue --save

 然后创建一个js文件,随便叫啥名字即可,我的文件名称是config.js,下面就是代码

// class MySelectMenu implements ISelectMenu {   // TS 语法
class MySelectMenu {
    // JS 语法
    constructor() {
        this.title = '插入域'
        this.tag = 'select'
        this.selectPanelWidth = 200
    }
    // 下拉框的选项
    // getOptions(editor: IDomEditor) {   // TS 语法
    getOptions(editor) {
        // JS 语法
        const options = [
            {
                value: '插入域', text: '插入域',
                selected: true
            }
        ]
        const { insertField = [] } = editor.getMenuConfig('insertField')
        insertField.forEach((item) => {
            const { text, value } = item
            options.push({
                text,
                value
            })
        })
        return options
    }
    // 菜单是否需要激活(如选中加粗文本,“加粗”菜单会激活),用不到则返回 false
    // isActive(editor: IDomEditor): boolean {    // TS 语法
    isActive(editor) {
        // JS 语法
        return false
    }
    // 获取菜单执行时的 value ,用不到则返回空 字符串或 false
    // getValue(editor: IDomEditor): string | boolean {    // TS 语法
    getValue(editor) {
        return '插入域'
    }
    // 菜单是否需要禁用(如选中 H1 ,“引用”菜单被禁用),用不到则返回 false
    // isDisabled(editor: IDomEditor): boolean {   // TS 语法
    isDisabled(editor) { // JS 语法
        // console.log('this.getOptions.length==1',this.getOptions(editor).length==1);
        // console.log('this.getOptions.length',this.getOptions(editor));
        if (this.getOptions(editor).length == 1) return true
        //  插入域无其他设置内容则禁用

        return false
    }
    // 点击菜单时触发的函数
    // exec(editor: IDomEditor, value: string | boolean) {   // TS 语法
    exec(editor, value) {
        // JS 语法
        // Select menu ,这个函数不用写,空着即可
        if (value != '插入域') {
            const innerHTML = `<span style="color: rgb(54, 88, 226);"><strong>#${value}#</strong></span>`
            editor.dangerouslyInsertHtml(innerHTML)
        }
    }
}

function getinsertField() {
    const insertField = []
    return insertField
}

const insertField1Conf = {
    key: 'insertField', // 定义 menu key :要保证唯一、不重复(重要)
    factory() {
        return new MySelectMenu() // 把 `YourMenuClass` 替换为你菜单的 class
    },
    // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中
    // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改
    config: {
        insertField: getinsertField()
    }
}

export default insertField1Conf

官网上面是有教怎么使用的,如果用的是js就是我写的这种,ts的话官网也有,记得看清楚,否则会报错

然后就是vue的页面使用

<template>
  <div style="border: 1px solid #ccc">
    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :default-config="toolbarConfig" :mode="mode" />
    <Editor v-model="html" style="height: 500px; overflow-y: hidden" :default-config="editorConfig" :mode="mode" @onCreated="onCreated" />
    <el-button type="primary" icon="el-icon-upload2" plain @click="save()">保存</el-button>
  </div>
</template>

<script>
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import insertField1Conf from '@/config'
import { Boot } from '@wangeditor/editor'
Boot.registerMenu(insertField1Conf) // 注册插入域菜单
export default {
  components: { Editor, Toolbar },
  props: {
    insertField: {
      type: Array,
      default: () => [
        { value: '标题1', text: '标题1' },
        { value: '标题2', text: '标题2' },
        { value: '标题3', text: '标题3' }
      ]
    }
  },
  data() {
    return {
      editor: null,
      html: '',
      toolbarConfig: {
        insertKeys: {
          index: 0, // 插入的位置,基于当前的 toolbarKeys
          keys: ['|', 'insertField', '|']
        }
      },
      editorConfig: {
        placeholder: '"请输入内容..."',
        MENU_CONF: {
          insertField: {
            insertField: [...this.insertField] // 设置插入域内容
          }
        }
      },
      mode: 'default' // or 'simple'
    }
  },
  watch: {
    insertField: {
      deep: true
    }
  },
  beforeDestroy() {
    const editor = this.editor
    if (editor == null) return
    editor.destroy() // 组件销毁时,及时销毁编辑器
  },
  mounted() {},
  methods: {
    onCreated(editor) {
      this.editor = Object.seal(editor) // 一定要用 Object.seal() ,否则会报错
    },
    save() {
      console.log(this.editor.getText())
      console.log(this.editor.getHtml())
      console.log(this.editor.getFragment())
      console.log(this.html)
    }
  }
}
</script>

<style src="@wangeditor/editor/dist/css/style.css"></style>

这里面我是没有全局注入,因为富文本编辑器用的地方也不多,没必要全局注入,有需要的便宜也可以自行封装,上面是简单的封装标题的一些小功能,这里面Boot.registerMenu(insertField1Conf)是单独引入,官网上面也有多个引入的方法,可以去官网直接cv,然后效果图如下

 后面按钮是我自己测试的一些事件,值得说的是

      console.log(this.editor.getHtml())

      console.log(this.html)这二个事件打印的结果都是html,所以都可以使用,这里就这些,祝大家遇到问题都能及时得到解决

标签:基本,文本编辑,菜单,return,wangEditor,value,editor,insertField,console
From: https://blog.csdn.net/weixin_47683973/article/details/142853587

相关文章

  • 解锁保险新世界-带你走进保险基本法
    作者:京东保险薛艳凯一、引言提到京东,大多数人的第一印象便是那座繁华的购物商城,便捷的购物体验深入人心。但在这片商业沃土上,还孕育着一群特殊的京东人——他们不卖“商品”,却以传递保障、守护幸福为己任,那就是京东保险人。我所在的部门是保代业务研发部,专注于为保险代理人提......
  • 计算机视觉之YOLO算法基本原理和应用场景
     YOLO算法基本原理整体流程YOLO将目标检测问题转化为一个回归问题。它将输入图像划分成多个网格单元,每个网格单元负责预测中心点落在该网格内的目标。对于每个网格单元,YOLO预测多个边界框以及这些边界框中包含目标的类别概率。边界框通常由中心点坐标(x,y)、宽度(w)和高度(h)来表示。......
  • 【Java 】包装类详解:从基本概念到实战技巧
     ......
  • linux入门到实操-2 linux桌面、终端基本操作,文件系统、目录结构、挂载点
     教程来源:B站视频BV1WY4y1H7d33天搞定Linux,1天搞定Shell,清华学神带你通关_哔哩哔哩_bilibili整理汇总的课程内容笔记和课程资料,供大家学习交流下载:夸克网盘分享本文内容为完整笔记的基础篇的1、2、3内容目录1.桌面和终端基本操作类似的图形化界面操作(省略)切换到终端页面2.Linux文......
  • MySQL 主从同步的基本原理
    1、简介MySQL主从同步主要通过二进制日志(binlog)来实现。以下是主从同步的工作流程1、主库记录binlog:当主库执行数据更新操作(如INSERT、UPDATE、DELETE)时,会将这些数据变更写入二进制日志(binlog)中。这个日志文件记录了所有影响数据的SQL操作。2、从库请求binlog:从库......
  • 五十、架构设计经验与技巧(架构设计基本原则)
    架构设计的基本原则是指导架构师在设计和实施系统时的重要参考。这些原则不仅影响系统的质量、可维护性和可扩展性,也直接影响到项目的成功与否。以下是几大基本原则及其在实践中的应用:1.可扩展性(Scalability)定义:系统在负载增加时,能够通过增加资源(如服务器、数据库等)来保......
  • Java基本数据类型转换
    一、自动类型转换1.基本介绍当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换数据类型按精度(容量)大小进行排序为:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/520b6288a88540b0ace9d2c22b844ca4.pngpublicclass......
  • Java的基本程序设计结构
    以上整理来自《Java核心技术卷I》注释数据类型变量与常量运算符字符串输入输出控制流大数数组**一个简单的Java应用程序**访问修饰符:用于控制程序的其他部分对这段代码的访问级别。类名:以大写字母开头源代码的文件名必须与公共类的名字相同,并用.java作为扩展名......
  • 数学建模--数据处理基本方法(基于matlab),一定要实践!!!!
    前言这是去年底学数学建模老哥的建模课程笔记;未来本人将陆陆续续的更新数学建模相关的一些基础算法,大家可以持续关注一下;提示:数学建模只有实战才能提升......
  • 为什么有了基本类型还需要包装类?
    引言在Java编程语言中,数据类型分为两种:基本类型(PrimitiveType)和包装类(WrapperClass)。基本类型包括int、char、boolean等,它们是最基础的数据类型,直接存储值。而包装类则是这些基本类型的对象化版本,如Integer、Character、Boolean等。许多Java初学者可能会疑惑:既然有了基本......