前端富文本编辑器 vue-html5-editor

1..项目建立与初始化javascript

在安装好脚手架的依赖后,要执行 npm install vue-html5-editor -S 来安装这个富文本插件,因为这个富文本插件的图标是依赖font-awesome.css的,因此要cnpm install font-awesome --save安装这个css而后在main.js中引入这个css   import 'font-awesome/css/font-awesome.min.css'css

2.使用vue-html5-editor富文本编辑器

新建一个common文件夹用于存放咱们的工具类js文件,而后将下面的代码copy进去:html

 

import Vue from 'vue' import VueHtml5Editor from 'vue-html5-editor' export default function () { let opt = { // 全局组件名称,使用new VueHtml5Editor(options)时该选项无效
    name: "vue-html5-editor", // 是否显示模块名称,开启的话会在工具栏的图标后台直接显示名称
    showModuleName: true, // 自定义各个图标的class,默认使用的是font-awesome提供的图标
 icons: { text: "fa fa-pencil", color: "fa fa-paint-brush", font: "fa fa-font", align: "fa fa-align-justify", list: "fa fa-list", link: "fa fa-chain", unlink: "fa fa-chain-broken", tabulation: "fa fa-table", image: "fa fa-file-image-o", hr: "fa fa-minus", eraser: "fa fa-eraser", undo: "fa-undo fa", "full-screen": "fa fa-arrows-alt", info: "fa fa-info", }, // 配置图片模块
 image: { // 文件最大致积,单位字节 
      sizeLimit: 512 * 1024 * 10, // 上传参数,默认把图片转为base64而不上传
      // upload config,default null and convert image to base64
 upload: { url:null, headers:{}, params: {}, fieldName:{} }, // 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
      // width和height是文件的最大宽高
 compress: { width: 600, height: 600, quality: 80 }, // 响应数据处理,最终返回图片连接
 uploadHandler(responseText){ // default accept json data like {ok:false,msg:"unexpected"} or {ok:true,data:"image url"}
        var json = JSON.parse(responseText); if(json.status == 200){ return json.data }else{ alert(json.error) } } }, // 语言,内建的有英文(en-us)和中文(zh-cn)
    language: "zh-cn", // 自定义语言
 i18n: { "zh-cn": { "align": "对齐方式", "image": "图片", "list": "列表", "link": "连接", "unlink": "去除连接", "table": "表格", "font": "文字", "full screen": "全屏", "text": "排版", "eraser": "格式清除", "info": "关于", "color": "颜色", "please enter a url": "请输入地址", "create link": "建立连接", "bold": "加粗", "italic": "倾斜", "underline": "下划线", "strike through": "删除线", "subscript": "上标", "superscript": "下标", "heading": "标题", "font name": "字体", "font size": "文字大小", "left justify": "左对齐", "center justify": "居中", "right justify": "右对齐", "ordered list": "有序列表", "unordered list": "无序列表", "fore color": "前景色", "background color": "背景色", "row count": "行数", "column count": "列数", "save": "肯定", "upload": "上传", "progress": "进度", "unknown": "未知", "please wait": "请稍等", "error": "错误", "abort": "中断", "reset": "重置" } }, // 隐藏不想要显示出来的模块
 hiddenModules: [], // 自定义要显示的模块,并控制顺序
 visibleModules: [ // "text", // "color",
      "font", "align", // "list", // "link", // "unlink", // "tabulation",
      "image", // "hr", // "eraser",
      "undo", // "full-screen", // "info",
 ], // 扩展模块,具体能够参考examples或查看源码
    // extended modules
 modules: { //omit,reference to source code of build-in modules
 } }; Vue.use(VueHtml5Editor, opt); }

接着在main.js中引入这个初始化的函数:vue

import initRichText from './common/initHTMLEditor.js' import 'font-awesome/css/font-awesome.min.css'

3.使用组件html5

<template>
    <div class="rich-text-test">
        <vue-html5-editor :content="content" :height="400" @change="updateData"></vue-html5-editor>
    </div>
</template>

<script>
export default {
    data() {
        return {
            content: ""
        };
    },
    methods: {
        updateData(e = "") {
            let c1 = e.replace(/<img width="100%"/g, "<img");
            let c2 = c1.replace(/<img/g, '<img width="100%"');
            this.content = c2;
            console.log(this.content);
        }
    }
};
</script>

<style scoped="scoped">
.rich-text-test{
    margin-top: 40px;
}
</style>

这个height属性是设置内容区的高度,content是内容区的数据内容,@change事件是内容区的监听事件,会在发生变化时触发,该函数接收一个参数,表示当前编辑器中的内容。运行结果以下(这里对图片的操做是转成base64的字符串):java

4.常见问题解决npm

(1)自定义工具栏的模块json

若是不想要显示这么多的工具,则只要配置visibleModules便可:服务器

 修改initHTMLEditor.js  中的配置便可编辑器

(2)移动端图片上传样式的处理

这里我没有配置服务端的上传文件的接口,因此我就直接将图片转成base64的来处理。可是这样会有问题,在PC端图片是能够修改大小的,可是在移动端上传的图片上是原图,也就是很大,图文混排的时候很是很差看,也很差编辑。这时候我作的处理挺投机取巧的,可是也是可行的方法。咱们知道change函数是在内容发生变化时触发的,这时候咱们只要将获取到的内容作一下修改便可,看代码:

updateData(e = "") { let c1 = e.replace(/<img width="100%"/g, "<img"); let c2 = c1.replace(/<img/g, '<img width="100%"'); this.content = c2; }, 

这样就能够了。

(3)图片上传的主要问题

图片上传的方法这里分两种。

第一种是默认把图片转为base64而不上传,最后点击发布上传全部。这里有个缺点是若是上传的图片太大并且有多张的话转为base64会很大,会出现由于文件太大上传不过去的状况,因此能够放弃这种方法。

第二种是在配置文件中(上面说的新建的js中)修改几行代码便可。原理是每上传一张图片,先上传到服务器而后返回一个图片连接地址,至于返回连接地址怎么展现在页面的问题,插件已经为咱们封装的很好,直接在下面的uploadHandler函数return返回的连接就能够啦。在作的过程当中出现了上传图片失败问题,缘由出在接口问题上,这里的接口写成input file上传不是base64的接口就能够。

// 配置图片模块
 image: { // 文件最大致积,单位字节 
      sizeLimit: 512 * 1024 * 10, // 上传参数,默认把图片转为base64而不上传
      // upload config,default null and convert image to base64
 upload: { url:'图片上传接口地址', headers:{}, params: {}, fieldName:'file' }, // 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
      // width和height是文件的最大宽高
 compress: { width: 600, height: 600, quality: 80 }, // 响应数据处理,最终返回图片连接
 uploadHandler(responseText){ // default accept json data like {ok:false,msg:"unexpected"} or {ok:true,data:"image url"}
        var json = JSON.parse(responseText); if(json.status == 200){ return json.data }else{ alert(json.error) } } },
相关文章
相关标签/搜索