首页 > 其他分享 >Vue3后台系统做一个富文本编辑器

Vue3后台系统做一个富文本编辑器

时间:2022-11-11 09:56:09浏览次数:74  
标签:文本编辑 res 语法 编辑器 editor file Vue3 后台 上传

前言:富文本编辑器的插件网上有很多,有些需要二次开发,有些有框架的限制,也有些稳定性差。我这边开发中由于领导催的紧,所以为了提高一下自己的效率决定使用wangEditor,这个编辑器不需要二次开发,同时支持vue和react框架,编辑器的作者也是国内程序员,文档相对来说比较友好  官网:https://www.wangeditor.com/

一、安装

//安装 editor
yarn add @wangeditor/editor # 或者 npm install @wangeditor/editor --save //安装Vue3 组件(可选) yarn add @wangeditor/editor-for-vue@next # 或者 npm install @wangeditor/editor-for-vue@next --save

二、引用

 

 

 这里editor是编辑器输入内容部门,toolbar是编辑器的菜单选项 

三、使用

在vue3中引用之后就可以直接使用,vue2需要注册组件。这里演示vue3

     <div style="border: 1px solid #ccc">
          <Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" mode="default" />
          <Editor style="height: 400px; overflow-y: hidden;" v-model="editorvalue" :defaultConfig="editorConfig" mode="default" @onCreated="handleCreated" />
        </div>
editorRef是编辑器实例
toolbarConfig是编辑器菜单配置项
editorvalue是编辑器输入的内容
editorConfig是编辑器的配置项
handleCreated 用于记录editor实例 很重要!!!
// 编辑器实例,必须用 shallowRef
const editorvalue = ref()
const editorRef = shallowRef()
const toolbarConfig = {}
const editorConfig = { placeholder: '请输入内容...', MENU_CONF: {} }
const handleCreated = (editor) => {
  editorRef.value = editor // 记录 editor 实例,重要!
}
// 组件销毁时,也及时销毁编辑器 onBeforeUnmount(() => {   const editor = editorRef.value   if (editor == null) return   editor.destroy() })
 

到这里已经可以简单使用了,但是不能上传图片       MENU_CONF就是为了配置这些东西的,但在配置之前要先定义一个空对象

四、配置上传图片

editorConfig.MENU_CONF['uploadImage'] = {
  server:'api-api-api',//服务端地址 必填

// form-data fieldName ,默认值 'wangeditor-uploaded-image' fieldName: 'your-custom-name', // 单个文件的最大体积限制,默认为 2M maxFileSize: 1 * 1024 * 1024, // 1M // 最多可上传几个文件,默认为 100 maxNumberOfFiles: 10, // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 [] allowedFileTypes: ['image/*'], // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。 meta: { token: 'xxx', otherKey: 'yyy' }, // 将 meta 拼接到 url 参数中,默认 false metaWithUrl: false, // 自定义增加 http header headers: { Accept: 'text/x-json', otherKey: 'xxx' }, // 跨域是否传递 cookie ,默认为 false withCredentials: true, // 超时时间,默认为 10 秒 timeout: 5 * 1000, // 5 秒 }

这里配置的接口需要满足特定条件,我这里截一下官网的说明

 

 满足这样的格式就可以直接使用了   

如果你的服务端 response body 无法按照上述格式,可以使用下文的 customInsert

 

editorConfig.MENU_CONF['uploadImage'] = {
    // 自定义插入图片
    customInsert(res: any, insertFn: InsertFnType) {  // TS 语法
    // customInsert(res, insertFn) {                  // JS 语法
        // res 即服务端的返回结果

        // 从 res 中找到 url alt href ,然后插入图片
        insertFn(url, alt, href)
    },
}

加一个这样的配置就可以了

五、上传图片的回调函数

editorConfig.MENU_CONF['uploadImage'] = {
    // 上传之前触发
    onBeforeUpload(file: File) { // TS 语法
    // onBeforeUpload(file) {    // JS 语法
        // file 选中的文件,格式如 { key: file }
        return file

        // 可以 return
        // 1. return file 或者 new 一个 file ,接下来将上传
        // 2. return false ,不上传这个 file
    },

    // 上传进度的回调函数
    onProgress(progress: number) {  // TS 语法
    // onProgress(progress) {       // JS 语法
        // progress 是 0-100 的数字
        console.log('progress', progress)
    },

    // 单个文件上传成功之后
    onSuccess(file: File, res: any) {  // TS 语法
    // onSuccess(file, res) {          // JS 语法
        console.log(`${file.name} 上传成功`, res)
    },

    // 单个文件上传失败
    onFailed(file: File, res: any) {   // TS 语法
    // onFailed(file, res) {           // JS 语法
        console.log(`${file.name} 上传失败`, res)
    },

    // 上传错误,或者触发 timeout 超时
    one rror(file: File, err: any, res: any) {  // TS 语法
    // one rror(file, err, res) {               // JS 语法
        console.log(`${file.name} 上传出错`, err, res)
    },
}

六、如果不想使用这里的上传图片功能,也可以使用自己的

editorConfig.MENU_CONF['uploadImage'] = {
    // 自定义上传
    async customUpload(file: File, insertFn: InsertFnType) {  // TS 语法
    // async customUpload(file, insertFn) {                   // JS 语法
        // file 即选中的文件
        // 自己实现上传,并得到图片 url alt href
        // 最后插入图片
        insertFn(url, alt, href)
    }
}

七、结尾

由于开发进度催的紧,很多api和功能也没来得及尝试,上传视频和上传图片用起来差不多,整体用起来还是很不错的,开发效率嘎嘎的,我得继续去赶进度了(流泪的黑奴),晚点会更新遇到的一些问题,欢迎各位大佬留言

标签:文本编辑,res,语法,编辑器,editor,file,Vue3,后台,上传
From: https://www.cnblogs.com/ljyn/p/16877936.html

相关文章

  • Vue3学习笔记(五)——路由,Router
    一、前端路由的概念与原理1.1.什么是路由路由(英文:router)就是对应关系。1.2.SPA与前端路由SPA指的是一个web网站只有唯一的一个HTML页面,所有组件的展示与切换都......
  • Vue3学习(八)
    组件学习:子组件:<template><div:title="msg">{{title}}</div><div>{{cnData}}</div><div>{{user}}</div></template><!--<scriptlang="ts">import{d......
  • vite+vue3引入表态图片时出错
    在使用vite开发vue项目时,我们异性习惯vue2的方法导入图片,结果导致各种找不到图片以下是错误方法<img:src="logo"class="login-logo"/>consturl=reactive({lo......
  • 使用宝塔面板 在centos7服务器上部署商城后台管理项目:node server后台 + vue2 前台
    使用宝塔面板在centos7服务器上部署商城后台管理项目:nodeserver后台+vue2前台域名解析假设有域名:mysite.top我们想在通过域名:app.mysite.top访问站点首先需要......
  • Android中实现用户无感知处理后台崩溃
    正所谓,要想没有bug,就一行代码也不写。App到了用户的手里,肯定是崩溃越少越好。Android中的崩溃处理和iOS不太一样,iOS崩溃通常是闪退,而安卓会出现如下的蹩脚的对话框当你的用......
  • vue3:elementPlus的dailog组件title标题位置设置
     按照官网打开弹出窗想要的是这种效果但自己出现的是下面这种,title跑中间了,body区唯一一个控件,也跑到下面了   设置el-dialog__header高度后,高度的确发生了变......
  • vue3中使用vue3-seamless-scroll(最新版本滚动插件)
    npm安装npminstallvue3-seamless-scroll--saveyarn安装yarnaddvue3-seamless-scrollbrowser安装<scriptsrc="https://unpkg.com/browse/vue3-seamless-scr......
  • vue3 递归菜单组件
    有一个需求,就是不知道菜单到底有多少级,需要按照层级一层层地遍历出来递归实现的三个流程:写函数写遍历条件设置终止条件实现逻辑父请求子组件,并且把列表值转给子组......
  • vue3-组合式api-provide/inject
    provide/inject适用于跨级通信,例如在父组件中改变值,在孙组件中通过依赖注入的方式能获取到父组件中改变的这个值一、父组件<template> <div>  <!--子组件-->......
  • vs code+uniapp+vue3+vite+typescript+pinia开发
    //–save-dev会把eslint安装到package.json文件中的devDependencies属性中,仅开发时用到,生产不需要npminstalleslint--save-dev//https://eslint.bootcss.co......