Vue使用富文本编辑器

在这里插入图片描述
本人用vue使用富文本编辑器踩了很多坑,特记下供大家借鉴。

一.选取编辑器

刚开始使用的是kindeditor,在npm社区中找到了适用于vue的版本vue-kindeditor。存在如下缺陷:文档不全、网上资料不全、npm社区实例过于简单、上传图片不能控制图片尺寸。

最终换用了wangEditor,优点:文档齐全(有具体vue用法实例)、网上资料多、上传图片可以控制尺寸。

个人推荐wangEditor,官网wangEditor - 轻量级web富文本编辑器

二:实例代码

前端vue

html:
<div class="ArticleDetail">
  <div ref="editor" style="text-align:left"></div>
</div>

js:

<script>
  import axios from 'axios';
  import {Loading} from 'element-ui'
  import E from 'wangeditor'
  var editor;

  export default {
    name: "WriteArticle",
    data: function () {
      return {
        Title:'',
        Content:''
      }
    },
    mounted:function(){
      var That = this;
      editor = new E(this.$refs.editor);
      editor.customConfig = {
        onchange:function(html){
          That.Content = html
        },
        uploadImgServer: '/api/UploadImg', // 上传图片到服务器
        uploadFileName : 'Content', //后端使用这个字段获取图片信息
        uploadImgMaxLength : 1 , // 限制一次最多上传 1 张图片
      } 
      editor.create()
    }
  }
</script>

后端node.js

Express.post('/UploadImg',function (Request,Response) {
  var From = new Formidable.IncomingForm();
  //设置保存 文件路径
  var TargetFile = Path.join(__dirname, './Public/');
  From.uploadDir = TargetFile;

  From.parse(Request, function (err, fields, files) {
    if (err) throw err;
    var FilePath = files.Content.path;    //此content由前端uploadFileName设置
    var NewPath = Path.join(Path.dirname(FilePath), files.Content.name);
    FS.rename(FilePath, NewPath, function (err) {
      if (err) throw err;
      var MyJson = {
        errno: 0,
        data:['http://localhost:8888/' + files.Content.name]
      };
      Response.json(MyJson);
    });
  });
});

三:代码高亮

用了wangEditor才发现,3.0版的不支持代码高亮。可是我的应用场景是我的博客,必须要有代码高亮功能,无奈换掉编辑器。

经过一番对比又选了一个叫mavon-editor的基于vue实现的MakeDown编辑器。好处是使用真滴方便,而且可以与别的MarkDown编辑器实现直接复制文本。Github地址如下hinesboy/mavonEditor,按文档操作即可

需要注意的地方是一般使用富文本的都是管理端,客户端拿到MarkDown格式的数据需要使用maked组件转成html格式的数据来展示。客户端还需要引用一个样式如下

<link href="https://cdn.bootcss.com/github-markdown-css/2.10.0/github-markdown.min.css" rel="stylesheet">

还需要在展示数据的容器上加上一个class,如:

<div class="markdown-body" v-html="Article.Content">{{ Article.Content }}</div>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun_qqq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值