• 关于富文本编辑器wangeditor在vue3中的使用


    1.安装

    1. npm install @wangeditor/editor --save
    2. npm install @wangeditor/editor-for-vue@next --save

    安装以上两个包

    2.引入进行使用

    1. <template>
    2. <div style="border: 1px solid #ccc;width: 1000px;z-index: 100;">
    3. <Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" />
    4. <Editor style="height: 400px; overflow-y: hidden;" v-model="valueHtmlCount" :defaultConfig="editorConfig"
    5. @onCreated="handleCreated" @onChange='handleChange' />
    6. div>
    7. template>

    注释:

    valueHtmlCount:编辑里的内容,为富文本字符串

    editorRef:工具栏实例

    toolbarConfig:工具栏配置文件

    editorConfig:编辑器菜单配置文件

    onCreated:创建实例触发的事件

    onChange:编辑里的内容改变触发的事件

    引入组件:

    1. 引入样式文件
    2. import '@wangeditor/editor/dist/css/style.css';
    3. 引入组件文件
    4. import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
    5. 引入数据类型(因为我用的是ts,所以需要引入数据类型)
    6. import { IToolbarConfig, IEditorConfig, IDomEditor } from '@wangeditor/editor';
    7. 引入vue常用
    8. import { onBeforeUnmount, ref, shallowRef, onMounted, watch } from 'vue';

    创建实例:

    1. // 编辑器实例,必须用 shallowRef
    2. const editorRef = shallowRef()

    定义接收富文本的变量:

    1. // 内容
    2. const valueHtmlCount = ref(props.valueHtml)

    3.配置

    配置工具栏:

    1. const toolbarConfig: Partial<IToolbarConfig> = {
    2. /* 工具栏配置 */
    3. toolbarKeys: [
    4. 'redo',
    5. 'undo',
    6. '|',
    7. 'headerSelect',
    8. 'bold',
    9. 'italic',
    10. 'underline',
    11. 'fontSize',
    12. 'fontFamily',
    13. 'color',
    14. 'bgColor',
    15. 'through',
    16. 'sub',
    17. 'sup',
    18. 'clearStyle',
    19. 'lineHeight',
    20. 'insertLink',
    21. 'divider',
    22. 'emotion',
    23. 'blockquote',
    24. 'justifyLeft',
    25. 'justifyRight',
    26. 'justifyCenter',
    27. 'justifyJustify',
    28. {
    29. key: 'group-image', // 必填,要以 group 开头
    30. title: '图片', // 必填
    31. iconSvg: '',
    32. menuKeys: ['uploadImage',
    33. 'deleteImage']
    34. },
    35. 'fullScreen',
    36. ]
    37. 以下是所支持的所有工具栏字段,共六十个
    38. // toolbarKeys: ['bold', 'underline', 'italic', 'through', 'code', 'sub', 'sup', 'clearStyle', 'color',
    39. // 'bgColor', 'fontSize', 'fontFamily', 'indent', 'delIndent', 'justifyLeft', 'justifyRight',
    40. // 'justifyCenter', 'justifyJustify', 'lineHeight', 'insertImage', 'deleteImage', 'editImage', 'viewImageLink',
    41. // 'imageWidth30', 'imageWidth50', 'imageWidth100', 'divider', 'emotion', 'insertLink', 'editLink', 'unLink',
    42. // 'viewLink', 'codeBlock', 'blockquote', 'headerSelect', 'header1', 'header2', 'header3', 'header4', 'header5',
    43. // 'todo', 'redo', 'undo', 'fullScreen', 'enter', 'bulletedList', 'numberedList', 'insertTable', 'deleteTable',
    44. // 'insertTableRow', 'deleteTableRow', 'insertTableCol', 'deleteTableCol', 'tableHeader', 'tableFullWidth',
    45. // 'insertVideo', 'uploadVideo', 'editVideoSize', 'uploadImage', 'codeSelectLang']
    46. }

    详情参考官网:工具栏配置 | wangEditor

    编辑器配置:

    1. type InsertFnType = (url: string) => void
    2. const editorConfig: Partial<IEditorConfig> = {
    3. MENU_CONF: {
    4. // 行高
    5. lineHeight: {
    6. lineHeightList: ['0.5', '1', '1.5', '2', '2.5', '3', '3.5', '4']
    7. },
    8. // 字体
    9. // fontFamily: {
    10. // fontFamilyList: ['黑体',
    11. // '楷体']
    12. // },
    13. uploadImage: {
    14. async customUpload(file: any, insertFn: InsertFnType) {
    15. let date = new Date().getTime();
    16. let filepath = 'nft/' + date + '/' + file.name;
    17. // file 即选中的文件
    18. client.value.put(filepath, file)
    19. .then(function (res: any) {
    20. // 上传图片,返回结果,将图片插入到编辑器中
    21. insertFn(res.url)
    22. }).catch(function (err: any) {
    23. console.log(err)
    24. })
    25. },
    26. }
    27. },
    28. placeholder: '请输入内容...',
    29. }

    上传图片配置:

    我这里是上传到阿里云的,参考:上传至阿里云OSS · wangEditor 用户文档

    也可以上传给后端,参考配置:菜单配置 | wangEditor

    销毁组件:

    1. // 组件销毁时,也及时销毁编辑器
    2. onBeforeUnmount(() => {
    3. const editor = editorRef.value
    4. if (editor == null) return
    5. editor.destroy()
    6. })

    记录实例:

    1. const handleCreated = (editor: IDomEditor) => {
    2. if (editor == null) return
    3. editorRef.value = editor // 记录 editor 实例,重要!
    4. // console.log('editor', editor)
    5. }

    动态获取内容:

    1. const handleChange = (editor: IDomEditor) => {
    2. console.log('valueHtmlCount', valueHtmlCount.value)
    3. }

  • 相关阅读:
    【算法面试必刷Java版八】链表中倒数最后k个结点
    接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
    事务的四大特性----ACID
    Pandas高级操作
    FFplay文档解读-47-多媒体过滤器一
    【Proteus仿真】【Arduino单片机】数码管显示
    蓝凌OA漏洞分析与处置方案
    【数据结构】树和二叉树的概念及结构
    刪除表情 (踩坑)
    10条Python 超实用小技巧,建议先收藏
  • 原文地址:https://blog.csdn.net/m0_54089303/article/details/127903640