Vue學習筆記-富文本編輯器wangEditor

最近開發Vue項目,想要一個功能更全面的編輯器,我找了好久,目前常見的編輯器有這些:

UEditor:百度前端的開源項目,功能強大,基于 jQuery,但已經沒有再維護,而且限定了后端代碼,修改起來比較費勁,并且比較重。

bootstrap-wysiwyg:微型,易用,小而美,只是 Bootstrap + jQuery...

kindEditor:功能強大,代碼簡潔,需要配置后臺,而且好久沒見更新了。

quill:本身功能不多,不過可以自行擴展,api 也很好懂,如果能看懂英文的話...

summernote:沒深入研究,UI挺漂亮,也是一款小而美的編輯器,就是用的人不多。

tinymce:GitHub 上星星很多,功能也齊全;唯一一個從 word 粘貼過來還能保持絕大部分格式的編輯器; 不需要找后端人員掃碼改接口,前后端分離;但是,在項目里配置麻煩一點。

wangEditor:輕量、簡潔、易用,但是升級到 3.x 之后,不便于定制化開發。不過作者很勤奮,廣義上和我是一家人,打個call。

于是就選擇則WangEditor2。

  1. 安裝:

    點擊 https://github.com/wangfupeng1988/wangEditor/releases 下載最新版
    使用git下載: git clone https://github.com/wangfupeng1988/wangEditor.git
    使用npm安裝: npm install wangeditor (注意 wangeditor 全部是小寫字母)
    使用bower下載:bower install wangEditor (前提保證電腦已安裝了bower)
    

    在項目中直接 npm install wangeditor --save,如果安裝了淘寶鏡像,就使用 cnpm install wangeditor --save,會快一點。

  2. 在頁面中放入

    <div id="editor"></div>
    

    然后

    import WangEditor from 'wangeditor'
    
    let that = this
    this.editor = new WangEditor('#WangEditor')  //這個地方傳入div元素的id 需要加#號
    // 配置 onchange 事件
    this.editor.change = function () {          // 這里是change 不是官方文檔中的 onchange
      // 編輯區域內容變化時,實時打印出當前內容
      console.log(this.txt.html())
    }
    this.editor.create()     // 生成編輯器
    this.editor.txt.html('<p>輸入內容...</p>')   //注意:這個地方是txt  不是官方文檔中的$txt
    
  3. 在開發中碰到過這么個問題,就是在用v-if動態顯示隱藏頁面元素時,頁面會進行重繪,目標元素div依然存在于dom樹中,但是wanEditor實例需要重新生成,且需要在this.$nextTick方法中調用

    this.editor = new WangEditor('#WangEditor')
    

    方可生效

  4. wangEditor的輸入控制欄與輸入區域默認的z-index為100001 10000,當富文本編輯框上方有下拉菜單時,選擇框會被覆蓋。解決辦法

    .w-e-menu{
      z-index: 2 !important;
    }
      .w-e-text-container{
        z-index: 1 !important;
      }
    

    注:w-e-menu的z-index必須比container的大,不然選擇菜單欄選項時,會選不上

    代碼示例:

    import WangEditor from 'wangeditor';
    export default {
        data(){
            return{
                dataInterface: {
                    editorUpImgUrl: 'http://xxxx'  // 編輯器插入的圖片上傳地址
                },
                editor: '',  // 存放實例化的wangEditor對象,在多個方法中使用
            }
        },
        ready(){
            this.createEditor();
        },
        beforeDestroy(){
            this.destroyEditor();
        },
        methods: {
            createEditor(){  // 創建編輯器
                this.editor = new WangEditor('account--editor');
                this.initEditorConfig();  // 初始化編輯器配置,在create之前
                this.editor.create();  // 生成編輯器
                this.editor.$txt.html('<p>要初始化的內容</p>');  // 初始化內容
                $('#account--editor').css('height', 'auto');  // 使編輯器內容區自動撐開,在css中定義min-height
            },
            destroyEditor(){  // 銷毀編輯器,官方沒有給出完美方案。此方案是作者給出的臨時方案
                this.editor.destroy();  // 這個沒有完全銷毀實例,只是作了隱藏
                // $('#account--editor').remove();  // 不報錯的話,這一步可以省略
                this.editor = null;
                WangEditor.numberOfLocation--;  // 手動清除地圖的重復引用,作者的臨時解決方案。否則單頁面來回切換時,地圖報錯重復引用
            },
            initEditorConfig(){  // 初始化編輯器配置
                this.editor.config.fontsizes = {  // 字號配置,增加14px
                    // 格式:'value': 'title'
                    1: '12px',
                    2: '13px',
                    3: '14px',
                    4: '16px',
                    5: '18px',
                    6: '24px',
                    7: '32px',
                    8: '48px'
                };
                this.editor.config.uploadImgUrl = this.dataInterface.editorUpImgUrl;  // 圖片上傳地址
    
                this.editor.config.uploadImgFileName = '_img';  // 統一指定上傳的文件name,需要指定。否則默認不同的上傳方式是不同的name
    
                const usersecret = window.localStorage.getItem('usersecret');  // 獲取 usersecret
    
                this.editor.config.uploadParams = {  // 自定義上傳參數配置
                    usersecret: usersecret
                };
            },
            getEditorContent(){  // 獲取編輯器 內容區內容
                this.editorContent = this.editor.$txt.html();  // 獲取 html 格式
                // this.editor.$txt.text();  // 獲取純文本
                // this.editor.$txt.formatText();  // 獲取格式化后的純文本
            },
        }
    }
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容