天天看點

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

文章的釋出功能中,我們希望像寫文檔一樣釋出一整篇帶标題、分段、加粗等效果的文章,而不是單純的一段文本,這時就需要用到富文本編輯器。富文本編輯器有很多版本,他們樣式不同,使用方法不同。

本篇這裡我們在npm下載下傳并使用vue相關的富文本編輯器:vue2-editor。

1.安裝vue2-editor

網址:

https://www.npmjs.com/package/vue2-editor
技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)
我們在admin端使用該包:

cd admin           
npm install vue2-editor           
技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

安裝完成,開始使用:

2.在網站中找到vue2Editor的引入方式,進行引用并使用

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

進入ArticleSet.vue元件檔案:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

複制上方标題輸入框,把input輸入框改為vue-editor元件:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

此時,頁面已經出現富文本編輯器,大家自行測試:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

3.修改接口和資料模型上傳富文本編輯器内容

富文本編輯器的原理就是将我們輸入的文本和樣式變成了HTML,在文本上加了HTML标簽:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

是以模型中建立一個類型為string的内容content就可以完成上傳了。

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

測試:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)
技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)
技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

沒問題。但是我們在檢查元素的時候會發現,部分效果的實作是使用了vue2-editor類包中的類名實作的,現在類包在admin端引入,以後在web端使用時我們也需要将vue2-editor引入,才能實作前台展現的效果。

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

4.富文本編輯器圖檔的引入

(1)自帶圖檔上傳的缺點

富文本編輯器當然是可以上傳圖檔的,但是上傳的圖檔是以base64編碼直接當作文本一起傳到背景接口的,現在我們還沒有修改接口,但是也可以測試一下。我還專門花了五分鐘重做了一個11k大小的小logo進行測試:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

上傳成功後,從清單進入頁面,可以看到接口檔案上傳的大小。普通的接口上傳隻需要不到1k,但是本次帶圖上傳的大小達到了11k,也就是說圖檔的大小會影響接口上傳速度,如果我們上傳多張高達十幾兆大小的圖檔,很可能對接口傳值的負載過大,引起崩潰:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

是以,我們要将圖檔的上傳修改一下。

(2)修改圖檔上傳方式

回到最初vue2-editor頁面,找到自定義上傳示例:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

修改ArticleSet.vue:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

将示例中的方法複制到我們的方法methods中,進行一下修改:

async handleImageAdded(file, Editor, cursorLocation, resetUploader) {
    // 引入包内自帶的formdata
    const formData = new FormData();
    // 将前端傳入formdata中資料名為file的資料追加到formdata,與上篇文章的圖檔上傳相同
    formData.append("file", file);
    // 使用我們上篇文章定義好的圖檔上傳接口,将formdata資料傳到背景,并接收傳回的資料到res
    const res = await this.$http.post('upload', formData)
    // 找到傳回資料中的圖檔連結
    let url = res.data.url;
    // 用vue-editor包自帶的插入方法:在光标所在位置,插入一張圖檔,圖檔的位址是url
    Editor.insertEmbed(cursorLocation, "image", url);
    // 重新整理(重置)編輯器
    resetUploader();
},           

測試一下,如果沒問題,結果應該與上篇文章的圖檔上傳效果一樣,圖檔顯示後直接在uploads檔案夾找到圖檔。

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

接口調用成功,file沒問題,找到filename:bbcf3dafdce988e88987ae84d5e5c805,去uploads檔案夾找一下:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

可以找到,沒問題。

再看一下編輯器内生成圖檔的代碼:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

是我們背景的圖檔路由位址,沒問題。儲存測試:

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

再進去,沒問題,富文本編輯器的圖檔上傳也成功了。

技能學習:學習使用Node.js + Vue.js,開發前端全棧網站-10.vue的富文本編輯器(vue2-editor)

繼續閱讀