首页 > 编程语言 >记录在vue3项目中使用wangeditor富文本编译器以及微信小程序中的渲染

记录在vue3项目中使用wangeditor富文本编译器以及微信小程序中的渲染

时间:2023-04-24 09:57:14浏览次数:48  
标签:const log wangeditor 微信 value 编译器 editor console any

首先,管理后台中的使用

npm install wangeditor

//f封装成了组件,以下是组件中的内容

<template>     <div style="border: 1px solid #ccc; maxwidth: 600px">       <!-- 工具栏 -->       <Toolbar         style="border-bottom: 1px solid #ccc"         :editor="editorRef"         :defaultConfig="toolbarConfig"         :mode="'default'"       />       <!-- 内容部分   @onBlur="handleChange"   -->       <Editor         style="height: 450px; overflow-y: hidden"         v-model="props.textHtml"         :defaultConfig="editorConfig"         :mode="'default'"         @onCreated="handleCreated"         @onChange="handleChange"             />     </div>   </template>   <script setup lang="ts">   import "@wangeditor/editor/dist/css/style.css"; // 引入 css     import { onBeforeUnmount, shallowRef } from "vue";   import { Editor, Toolbar } from "@wangeditor/editor-for-vue";   // import { request } from "@/api/axios";   import {ajax} from "../../api"   import { ElMessage } from "element-plus";   import type { IEditorConfig, IToolbarConfig } from "@wangeditor/core";   const AJAX_BASE_URL = import.meta.env.VITE_AJAX_BASE_URL     const emits = defineEmits(["getHtmlVal"]);   const props = defineProps({     // 内容 HTML     textHtml: {       type: String,       default: "hello",     },   });   console.log('3333',props.textHtml)   // 编辑器实例,必须用 shallowRef   const editorRef = shallowRef();   // 工具栏配置   const toolbarConfig: Partial<IToolbarConfig> = {     // 用于去掉不需要的工具栏配置     excludeKeys: [       "insertVideo", // 去掉插入视频功能       "fullScreen", // 去掉全屏功能       "group-video",   //去掉上传视频
    ],   };   // console.log(toolbar.getConfig().toolbarKeys)   // 编辑器配置   const editorConfig: Partial<IEditorConfig> = {     // 最长输入2000字     maxLength: 2000,     // 进入页面不自动聚焦     autoFocus: true,     MENU_CONF: {},   };   // 上传图片   //@ts-ignore   editorConfig.MENU_CONF["uploadImage"] = {

    async customUpload(file: any, insertFn: any) {       upLoadImgVideo("1", file, insertFn);     },   };     // 上传视频   //@ts-ignore   editorConfig.MENU_CONF["uploadVideo"] = {     async customUpload(file: any, insertFn: any) {       upLoadImgVideo("2", file, insertFn);     },   };     // 封装 - 上传图片、视频   const upLoadImgVideo = async (type: string, file: any, insertFn: any) => {     if (file.size / 1024 / 1024 > 50) {       ElMessage.error(`文件大小不能超过50MB!`);       return false;     } else {      // 这里根据自己的需求进行处理 --- S       let formData = new FormData();       formData.append("uploadFile", file);       // formData.append("fileType", type);       const url: string = "/activity/resource/uploadFile";       console.log(formData)       //  这里根据自己的需求进行处理 --- E       const result =await  ajax.post('/file/upload', formData)       console.log(result)       if(result.ok  && result.data){         insertFn( result.data);       }else{         ElMessage.warning(`上传失败`);       }            }   };     // 组件销毁时,也及时销毁编辑器   onBeforeUnmount(() => {     const editor = editorRef.value;     if (editor == null) return;     editor.destroy();   });     const handleCreated = (editor: any) => {     editorRef.value = editor; // 记录 editor 实例,重要!     // 查看所有工具栏key     // console.log(editor.getAllMenuKeys());   };   const onClear = ()=>{     const editor = editorRef.value;     console.log("fdfd")     editor.clear()   }   const setHtml = (value: any)=>{     const editor = editorRef.value;     console.log(value)     console.log("111",editor.getHtml())
    editor.setHtml(value)   }   // 获得输入的内容   const handleChange = (editor: any) => {     console.log(editor.getHtml())     emits("getHtmlVal", editor.getHtml());   };
  defineExpose({     onClear,     setHtml   });

  </script>     <style lang="scss" scoped>   :deep() .w-e-textarea-video-container {     video,     img {       max-width: 787px;     }   }   </style>   //使用组件 import Editor  from "../../../components/editor/editor.vue";   //引入组件   //使用 <Editor @getHtmlVal="getHtmlVal" ref="editor" v-model="goods.description" style="height: 600px" /> //赋值 const getHtmlVal = (value:any)=>{   console.log(value)   goods.description = value }   微信小程序中渲染,我用的是rich-text,问题挺多, 第一个问题,小程序不识别缩进问题 result.data.description.replace(/&nbsp;/g,"&ensp;")  //使用ensp替换nbsp 第二个问题,富文本中的图片相连时中间留有空白以及图片宽度的问题 description = description.replace(/<img[^>]*?\s+style=(['"])[^'"]*?\1[^>]*?>/g, function(match) {        // 将style属性替换为空字符串       return match.replace(/\s+style=(['"]).*?\1/, '');  });  description = description.replace(/<img([^>]*)src=(['"])([^'"]+)\2([^>]*)>/gi, '<img$1src=$2$3$2 style="display:block;width:100%;" catchtap="previewImage" data-src=$2$3$2$4>'); 删除原本富文本存在的style,重新添加一个带有样式的style,并且对其添加了一个data-src属性,属性值是当前图片链接,准本对其增加一个预览大图的功能    

标签:const,log,wangeditor,微信,value,编译器,editor,console,any
From: https://www.cnblogs.com/lishuang2243/p/17348516.html

相关文章

  • Vue3 +element-plus+ wangEditor 富文本编辑器+前端七牛云上传
    我用的vue3,element-plus,没用ts搭建wangEditor 参考地址 https://www.cnblogs.com/xbxxf/p/16791084.html七牛云安装参考地址 https://blog.csdn.net/ldoit/article/details/121533204本来就是抄大佬的,就不复制粘贴了主要是整理关于七牛云部分的代码,秉着复制就能用的原则,我......
  • 微信小程序开发页面下拉刷新和scrollview
    问题背景本文主要介绍微信小程序开发过程实现页面下拉刷新以及scrollview组件实现下拉刷新,以及二者的关系。问题分析微信小程序开发过程,如果要实现页面刷新以及scrollerview下拉刷新,步骤如下:(1)页面独立配置在对应页面的json文件中配置属性:"enablePullDownRefresh":true(2)项目......
  • Mac多开微信
    使用Linuxnohup命令实现,将微信主程序输出到一个“黑洞”里,即使此时关掉终端也不会影响双开微信的运行。将以下代码复制到终端(Teriminal)运行,即可开启第二个微信,开启后,关闭终端也可以正常运行。nohup/Applications/WeChat.app/Contents/MacOS/WeChat>/dev/null2>&1弊端是每......
  • VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法
    目录问题背景问题描述测试代码测试结果现象描述问题分析解决方案修改默认配置1.已经存在的文件全部使用gbk编码重新保存。2.在工程目录下新建.vscode目录,如果已存在则跳过此步骤。3.在.vscode目录中新建settings.json,launch.json两个文件,已有则跳过。4.settings.json文件添加......
  • 微信JS-SDK出现“invalid signature”的问题时该如何解决
    最近我在帮助前端生成微信JS-SDK分享签名时,遇到了一个问题,即wx.config初始化一直报invalidsignature的错误,我想总结一下我排查这个问题的过程。官方文档中已经说了详细介绍了排查过程,如下图所示: 校验工具校验签名过程首先我在微信提供的签名校验工具中比对了接口生成......
  • 微信小程序-小程序事件冒泡和事件捕获
    !>小程序当中的时间捕获与时间冒泡与原生JS的是一样的这里我就来直接上代码来演示一下在微信小程序当中的时间冒泡与捕获,关于时间的捕获与冒泡可以参考我JS文章里面的介绍即可。事件捕获index.wxml:<viewclass="one"capture-bind:tap="onOneClick"><viewclass="two"captu......
  • 微信小程序-小程序事件绑定
    什么是事件事件是视图层到逻辑层的通讯方式。事件可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。事件对象可以携带额外信息,如id,dataset,touches。常见事件tap:手指触摸后马上离开longpress:手指触摸后,超过350ms......
  • 微信小程序-事件传递数据
    事件对象小程序在触发事件监听方法的时候会自动传递一个事件对象给我们,通过这个事件对象我们可以拿到页面传递过来的一些数据。事件对象的作用拿到触发事件的元素:currentTarget拿到触发事件的位置:detail拿到从页面传递过来的数据:dataset/mark页面传递数据的方法datasetmark通......
  • 用 python 上传文件到微信小程序云存储
    前言小程序上了云托管后不打算继续使用其他图床,而是使用云托管自带的图床。而由于时间紧迫只能在本地使用云托管提供的服务器调用对象存储api云托管上传文件的文档在这里上传文件文档如果你上传带有中文名的文件,或者上传的路径有中文名时,需要修改一下requests库的源码,否......
  • 微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序
    目录H5微信小程序测试代码文档页面生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle组件生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle经测试,得出结论:H5和微信小程序的生命周期函数调用顺序不一致H5pagebeforeCreatepag......