vue+富文本编辑器wangEditor4的使用

1. wangEditor4介绍

wangEditor4 —— 轻量级 web 富文本编辑器,配置方便,使用简单。支持 IE10+ 浏览器。

2. 下载

注意: wangeditor都是小写字母

npm install wangeditor

3. 定义编辑器子组件

  • 创建富文本编辑器子组件 editor.vue

    template

    <template>
      <div class="editor" id="box"></div>
    </template>
    

    script

    import E from "wangeditor";
    export default {
      data() {
        return {};
      },
      mounted() {
        this.initE();
      },
      methods: {
        initE() {
          this.editor = new E("#box");
          //这里各位小伙伴可以查询官网,根据自己的需求进行菜单栏调整
          this.editor.config.menus = [
            "head", // 标题
            "bold", // 粗体
            "fontSize", // 字号
            "fontName", // 字体
            "italic", // 斜体
            "underline", // 下划线
            "strikeThrough", // 删除线
            "foreColor", // 文字颜色
            "backColor", // 背景颜色
            "link", // 插入链接
            "list", // 列表
            "justify", // 对齐方式
            "quote", // 引用
            "emoticon", // 表情
            "image", // 插入图片
            "table", // 表格
            "code", // 插入代码
            "undo", // 撤销
            "redo", // 重复
          ];
          //为true,则上传后的图片转为base64编码,为false,则上传图片到服务器,二者不能同时使用
          this.editor.config.uploadImgShowBase64 = false;
          //服务器接收的上传图片的属性名
          this.editor.config.uploadFileName = "file";
          //服务器上传图片的接口地址
          this.editor.config.uploadImgServer = `http://localhost:3000/upload`;
          // 默认限制图片大小是 5M ,可以自己修改。
          this.editor.config.uploadImgMaxSize = 2 * 1024 * 1024; // 2M
          // 限制类型,可自定义配置,默认为: ['jpg', 'jpeg', 'png', 'gif', 'bmp']
          this.editor.config.uploadImgAccept = ['jpg', 'jpeg',"png", "gif", "bmp", "webp"];
          //上传图片过程中钩子函数
          this.editor.config.uploadImgHooks = {
            // 上传图片之前
            before: function (xhr) {
              // console.log(xhr);
    
              // // 可阻止图片上传
              // return {
              //   prevent: true,
              //   msg: "需要提示给用户的错误信息",
              // };
            },
            // 图片上传并返回了结果,图片插入已成功
            success: function (xhr) {
              console.log("success", xhr);
            },
            // 图片上传并返回了结果,但图片插入时出错了
            fail: function (xhr, editor, resData) {
              console.log("fail", resData);
            },
            // 上传图片出错,一般为 http 请求的错误
            error: function (xhr, editor, resData) {
              console.log("error", xhr, resData);
            },
            // 上传图片超时
            timeout: function (xhr) {
              console.log("timeout");
            },
          };
        // 在输入内容时,把内容传给父组件
          this.editor.config.onchange = (html) => {
            this.$emit("change", html); // 将内容同步到父组件中
          };
          this.editor.create();
          //初始化富文本编辑器时显示的内容
          this.editor.txt.html("<h1>haha</h1>");
        },
      },
    };
    

4. 图片上传注意事项

4.1 响应数据格式要求

只有响应数据的格式符合下列要求,才会调用success和fail等回调函数

  • 响应数据格式
{
    // errno 即错误代码,0 表示没有错误。
    //       如果有错误,errno != 0,可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
    "errno": 0,

    // data 是一个数组,返回图片Object,Object中包含需要包含url、alt和href三个属性,它们分别代表图片地址、图片文字说明和跳转链接,alt和href属性是可选的,可以不设置或设置为空字符串,需要注意的是url是一定要填的。
    "data": [
        {
            url: "图片地址",
            alt: "图片文字说明",
            href: "跳转链接"
        },
        {
            url: "图片地址1",
            alt: "图片文字说明1",
            href: "跳转链接1"
        },
        "……"
    ]
}
  • 回调函数
//上传图片过程中钩子函数
      this.editor.config.uploadImgHooks = {
        // 上传图片之前
        before: function (xhr) {
          // console.log(xhr);

          // // 可阻止图片上传
          // return {
          //   prevent: true,
          //   msg: "需要提示给用户的错误信息",
          // };
        },
        // 图片上传并返回了结果,图片插入已成功
        success: function (xhr) {
          console.log("success", xhr);
        },
        // 图片上传并返回了结果,但图片插入时出错了
        fail: function (xhr, editor, resData) {
          console.log("fail", resData);
        },
        // 上传图片出错,一般为 http 请求的错误
        error: function (xhr, editor, resData) {
          console.log("error", xhr, resData);
        },
        // 上传图片超时
        timeout: function (xhr) {
          console.log("timeout");
        },
      };
  • express后端返回示例

    //图片上传
    router.post("/upload", upload.single("file"), (req, res) => {
        // 需要返回图片的访问地址    域名+上传文件夹+文件名
        const url = "http://localhost:3000/upload/" + req.file.filename
        res.json({ 
            errno: 0,
            "data": [
                {
                    url,
                    alt: '可爱',
                    href:"http://www.baidu.com"
                }
            ]
         })
    })
    

4.2 响应数据不符合格式要求

  • express后端返回示例

    //图片上传
    router.post("/upload", upload.single("file"), (req, res) => {
        // 需要返回图片的访问地址    域名+上传文件夹+文件名
        const url = "http://localhost:3000/upload/" + req.file.filename
        res.json({url})
    })
    
  • 自定义回调函数,插入图片

customInsert: function (insertImgFn, result) {
    //result为上传图片成功的时候返回的数据,这里我打印了一下发现后台返回的是data:[{url:"路径的形式"},...]
    // console.log(result.data[0].url)
    //insertImgFn()为插入图片的函数
    //循环插入图片
    // for (let i = 0; i < 1; i++) {
    // console.log(result)
    let url = "http://localhost:3000/upload/" + result.url;
    insertImgFn(url);
}

5. 其它API

  • editor.txt.html() 设置编辑器内容。
  • editor.txt.append('<p>追加的内容</p>') 继续追加内容。
  • editor.txt.html() 获取 html
  • editor.txt.clear() 清空编辑器内容。

6. 父组件使用富文本编辑器子组件

<template>
  <div id="app">
    <editor @change="change"></editor>
    <button @click="send()">提交</button>
  </div>
</template>

<script>
import editor from "@/views/editor.vue";
export default {
  components: { editor },
  data(){
    return {
      result: ''
    }
  },
  methods: {
    //提交富文本编辑器的内容
    send(){
      console.log('send',this.result);
    },
    change(html){
      this.result = html
    }
  }
  
};
</script>

<style lang="scss">
</style>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339

推荐阅读更多精彩内容