前端富文本編輯器 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) } } },
相關文章
相關標籤/搜索