vue-quill-editor富文本編輯器

由于我們在項目中使用的次數(shù)不會很多,這里將作為按需引入方式使用褂傀。

富文本編輯器-效果展示

安裝依賴

npm install vue-quill-editor --save

創(chuàng)建 VueQuillEditor.js

import Vue from 'vue'
import VueQuillEditor from 'vue-quill-editor'
// require styles
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
Vue.use(VueQuillEditor)

創(chuàng)建 titleConfig.js(可不添加)

// 文本提示語
export const titleConfig = {
    "ql-bold": "加粗" ,
    "ql-color": "顏色",
    "ql-font": "字體",
    "ql-code": "插入代碼",
    "ql-italic": "斜體",
    "ql-link": "添加鏈接",
    "ql-background": "背景顏色",
    "ql-size": "字體大小",
    "ql-strike": "刪除線",
    "ql-script": "上標/下標",
    "ql-underline": "下劃線",
    "ql-blockquote": "引用",
    "ql-header": "標題",
    "ql-indent": "縮進",
    "ql-list": "列表",
    "ql-align": "文本對齊",
    "ql-direction": "文本方向",
    "ql-code-block": "代碼塊",
    "ql-formula": "公式",
    "ql-image": "圖片",
    "ql-video": "視頻",
    "ql-clean": "清除字體樣式",
    "ql-upload": "文件"
};

按需引入方式

1.html

<el-upload
    v-show="false"
    class="upload-demo"
    :action="uploadImgUrl"
    :headers="uploadHeaders"
    accept="image/jpeg,image/png,image/bmp"
    :before-upload="handleBeforeUpload"
    :on-success="handleSuccess"
    :show-file-list="false"
>
    <el-button v-show="false" class="ivu-btn" size="small" type="primary"></el-button>
</el-upload>
<quill-editor class="ql-editor"
    v-model="content"
    ref="QuillEditor"
    :options="editorOption"
    @blur="onEditorBlur($event)"
    @focus="onEditorFocus($event)"
    @change="onEditorChange($event)"
></quill-editor>

2.javaSrcipt

import '@/assets/js/quillEditor/VueQuillEditor.js'
import { titleConfig } from '@/assets/js/quillEditor/titleConfig.js' // 富文本文本提示語
export default {
    data() {
        return {
            fileSize: 10,
            uploadHeaders: { // 圖片上傳接口請求頭
                Authorization: "token",
                Platform: "web",
            },
            uploadImgUrl: "/upload", // 上傳的圖片服務(wù)器地址
            content: "",
            editorOption: {
                placeholder: '請在這里輸入',
                modules: {
                    toolbar: {
                        container: [
                            ['bold', 'italic', 'underline', 'strike'],    //加粗欠橘,斜體手形,下劃線,刪除線
                            ['blockquote', 'code-block'],     //引用舅锄,代碼塊
                            [{ 'header': 1 }, { 'header': 2 }],        // 標題躯枢,鍵值對的形式;1槐臀、2表示字體大小
                            [{ 'list': 'ordered'}, { 'list': 'bullet' }],     //列表
                            [{ 'script': 'sub'}, { 'script': 'super' }],   // 上下標
                            [{ 'indent': '-1'}, { 'indent': '+1' }],     // 縮進
                            [{ 'direction': 'rtl' }],             // 文本方向
                            [{ 'size': ['small', false, 'large', 'huge'] }], // 字體大小
                            [{ 'header': [1, 2, 3, 4, 5, 6, false] }],     //幾級標題
                            [{ 'color': [] }, { 'background': [] }],     // 字體顏色锄蹂,字體背景顏色
                            [{ 'font': [] }],     //字體
                            [{ 'align': [] }],    //對齊方式
                            ['clean'],    //清除字體樣式
                            ['image']    //上傳圖片
                            // ['image','video','link']    //上傳圖片、上傳視頻水慨、上傳文件
                        ],
                        handlers: {
                            'image': function (value) {
                                if (value) {
                                    // 調(diào)用iview圖片上傳
                                    document.querySelector('.upload-demo .ivu-btn').click()
                                } else {
                                    this.quill.format('image', false);
                                }
                            }
                        }
                    }
                }
            },
        }
    },
    // 在dom創(chuàng)建完成后再調(diào)用
    mounted() {
        // 富文本提示信息
        this.$nextTick(() => {
            const oToolBar = document.getElementsByClassName('ql-editor')[0];
            const aButton = oToolBar.querySelectorAll('button');
            const aSelect = oToolBar.querySelectorAll('select');
            aButton.forEach(function(item){
                if(item.className === 'ql-script'){
                    item.value === 'sub' ? item.title = '下標': item.title = '上標';
                }else if(item.className === 'ql-indent'){
                    item.value === '+1' ? item.title ='向右縮進': item.title ='向左縮進';
                }else{
                    item.title = titleConfig[item.classList[0]];
                }
            });
            aSelect.forEach(function(item){
                item.parentNode.title = titleConfig[item.classList[0]];
            });
        })
    },
    methods: {
        onEditorBlur(e){
            console.log(e, '失去焦點事件');
        },
        onEditorFocus(e){
            console.log(e, '獲得焦點事件');
        },
        onEditorChange(e){
            console.log(e, '內(nèi)容改變事件');
        },
        // 上傳前校檢格式和大小
        handleBeforeUpload(file) {
            // 檢驗文件類型
            const isIMAGE = (file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/bmp');
            if (!isIMAGE) {
                this.$message.error(`請上傳圖片類型文件得糜!`);
                return false;
            }
            // 校檢文件大小
            const isLt = file.size / 1024 / 1024 < this.fileSize;
            if (!isLt) {
                this.$message.error(`上傳文件大小不能超過 ${this.fileSize} MB!`);
                return false;
            }
            return true;
        },
        handleSuccess (res) {
            // 獲取富文本組件實例
            let quill = this.$refs.QuillEditor.quill
            // 如果上傳成功
            if (res.code===0) {
                // 獲取光標所在位置
                let length = quill.getSelection().index;
                // 插入圖片,res為服務(wù)器返回的圖片鏈接地址
                quill.insertEmbed(length, 'image', res.data)
                // 調(diào)整光標到最后
                quill.setSelection(length + 1)
            } else {
                // 提示信息晰洒,需引入Message
                this.$message.error('圖片插入失敗')
            }
        },
    }
}

編輯后成功返回

console.log(this.content);
解決圖片上傳后的 html 模板轉(zhuǎn)碼失敵丁(看需求,非必須)
  • 【UrlEncode編碼/UrlDecode解碼】
encodeURIComponent(this.content); // 編碼
decodeURIComponent(this.content); // 解碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谍珊,一起剝皮案震驚了整個濱河市治宣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砌滞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝润,死亡現(xiàn)場離奇詭異绊茧,居然都是意外死亡,警方通過查閱死者的電腦和手機打掘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門华畏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹏秋,“玉大人,你說我怎么就攤上這事亡笑÷乱模” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵况芒,是天一觀的道長惜纸。 經(jīng)常有香客問我,道長绝骚,這世上最難降的妖魔是什么耐版? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮压汪,結(jié)果婚禮上粪牲,老公的妹妹穿的比我還像新娘。我一直安慰自己止剖,他們只是感情好腺阳,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著穿香,像睡著了一般亭引。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上皮获,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天焙蚓,我揣著相機與錄音,去河邊找鬼洒宝。 笑死购公,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的雁歌。 我是一名探鬼主播宏浩,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼靠瞎!你這毒婦竟也來了比庄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤较坛,失蹤者是張志新(化名)和其女友劉穎印蔗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丑勤,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡华嘹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了法竞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耙厚。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡强挫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薛躬,到底是詐尸還是另有隱情俯渤,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布型宝,位于F島的核電站八匠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趴酣。R本人自食惡果不足惜梨树,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岖寞。 院中可真熱鬧抡四,春花似錦、人聲如沸仗谆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隶垮。三九已至藻雪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸吞,已是汗流浹背阔涉。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捷绒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓贯要,卻偏偏與公主長得像暖侨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崇渗,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容