最簡單的Vue專案整合UEditor方式,目前沒有之一
前言
上圖是UEditor
的 百度指數 折線圖。雖然今天已經是 2018 年,且優秀的富文字編輯器層出不窮(包括移動端),但從圖中可以看出UEditor
仍然維持著較高的搜尋熱度。而不少公司和個人也仍然在專案中使用UEditor
。目前,UEditor
官網的最後一次版本更新是 1.4.3.3,這已經是 2016 年的事情了,而今天的前端開發,很多小夥伴都在使用Vue
,React
這種元件化的前端框架。這就導致在這些“現代”框架中整合UEditor
變得很不平滑。所以才會有下圖這些大量介紹如何在Vue
專案中整合UEditor
的部落格:
為了提高程式碼的可複用性,也為了儘可能的不在業務程式碼中參雜UEditor
v-model
雙向繫結的方式來使用UEditor
,簡單到就像使用input
框一樣。當我擼完,感覺非常的Vue
範兒。而且看了不少部落格和GitHub
專案,都沒有類似的實現。於是我決定釋出到 npm 上,幫助一眾還在思考如何把UEditor
整合到Vue
專案中的小夥伴。幾個月下來,基本已經穩定,所以,今天通過這篇部落格,分享給大家。
先看效果圖:
安裝
npm i vue-ueditor-wrap
快速開始(基於vue-cli 2.x,完整DEMO)
-
下載 最新編譯的資原始檔。官網下載的版本是
1.4.3.3
dist
目錄下,你可以放心下載,當然你也可以自己clone
官方原始碼並編譯。將
dist
目錄下的UEditor
資原始檔解壓並重命名為UEditor
(只需要選擇一個你需要的版本,比如utf8-php
),放入你專案的static
目錄下)如果你使用的是 vue-cli 3.x, 把資原始檔解壓並重命名為
UEditor
,然後放入你專案的public
目錄下, 並在第五步新增配置UEDITOR_HOME_URL: './UEditor/'
引入
VueUeditorWrap
元件import VueUeditorWrap from 'vue-ueditor-wrap'
註冊元件
components: { VueUeditorWrap },
v-model
繫結資料<vue-ueditor-wrap v-model="msg"></vue-ueditor-wrap>
data () { return { msg: '<h2>Hello World!</h2>' } }
至此你已經可以在頁面中看到一個初始化之後的
UEditor
了,並且它已經成功和資料綁定了。根據專案需求修改配置,完整配置選項檢視
ueditor.config.js
原始碼或 官方文件<vue-ueditor-wrap :config="myConfig"></vue-ueditor-wrap>
data () { return { myConfig: { // 如果需要上傳功能,找後端小夥伴要伺服器介面地址 // serverUrl: 'http://api.demo.com/ueditor/upload', // 你的UEditor資源存放的路徑,相對於打包後的index.html UEDITOR_HOME_URL: './static/UEditor/', // 編輯器不自動被內容撐高 autoHeightEnabled: false, // 初始容器高度 initialFrameHeight: 240, // 初始容器寬度 initialFrameWidth: '100%', // 關閉自動儲存 enableAutoSave: false } } }
如何獲取UEditor例項等的更詳細使用介紹,可以參考
GitHub
的 README.md
特點
v-model
雙向資料繫結!簡單、易用。你只需要像繫結input
框一樣繫結vue-ueditor-wrap
元件即可,你的程式碼裡將沒有例項化,沒有getContent
,setContent
等。完全遵從官方API。所有的配置引數和例項方法與官方完全一致,通過給
vue-ueditor-wrap
元件的config
屬性傳遞一個物件,你就可以得到一個完全獨立配置的UEditor
編輯器。你甚至可以在上面使用v-for
一次渲染99個兔斯基(不要忘記新增key
值)。自動新增依賴檔案。你不需要自己在
index.html
或main.js
裡引入UEditor
的js
檔案。更重要的是即使你在一個頁面裡同時使用多個vue-ueditor-wrap
元件,它所依賴的js
檔案也只會載入一次。這麼做的原因在於你不需要當用戶一開啟專案就先載入大量UEditor
相關的資源,所有的資原始檔只會在vue-ueditor-wrap
元件第一次被啟用時才載入。當然如果你在index.html
或main.js
裡提前引入了相關資源,vue-ueditor-wrap
也會準確判斷,你不用擔心它會重複載入資源。
常見問題
是否支援
IE
等低版本瀏覽器?支援
IE9
!!!為什麼我會看到這個?
這是因為你的
UEDITOR_HOME_URL
路徑填寫錯誤,請參考步驟5
為什麼我會看到
後臺配置項返回格式出錯
?我如何上傳圖片和檔案?UEditor
的上傳圖片、檔案等是需要與後臺配合的功能,而你沒有在config
中設定正確的serverUrl
,去找你的後端小夥伴要吧!為什麼我輸入
"? ! $ #"
這些特殊字元,沒有繫結上去?那時因為
v-model
的實現基於對UEditor
例項上contentChange
事件的監聽,由於你輸入這些特殊字元時通常是按住shift
鍵的,UEditor
本身的contentChange
在shift
鍵按住時不會觸發,你也可以嘗試同時按下多個鍵,你會發現contentChange
只觸發一次。所有我也很無奈呀!請移步 UEditor。單圖片上傳後
v-model
繫結的是loading
小圖示。在我最新編輯的資原始檔中,已經修復了官方
1.4.3.3
的這個 BUG,如果你使用的是官網下載的資原始檔,請替換資原始檔或參見 Issue1。
總結
雖然這是一次很小的創新,UEditor
也可能是一個過氣的富文字編輯器。但是在維護這個專案以及幫助一眾小夥伴解決ISSUE
的過程中,我成長了很多。最令我感動的是不少小夥伴還給我郵箱發了感謝信,而且我還發現確實已經有一些人開始在專案中用了。這種被他人認可,以及幫助別人的快樂真的只有體會過的人才知道。也就在前不久,我決定開始在掘金寫部落格,雖然一些東西寫的不那麼好,或者自己認知有錯誤,但總有一群熱心且優秀的小夥伴,會在評論區指正以及給出寶貴的意見。分享是快樂的!所以,我的這篇文章也權當拋磚引玉,如果小夥伴們有好的建議或更炫酷的操作,也歡迎PR
,不過PR
之前請先執行npm run lint
進行程式碼風格檢測,大部分語法細節也可以通過npm run fix
修正,也要記得修改package.json
的版本號version
,方便我直接釋出到npm
。當然如果你有好用的富文字編輯器,也可以在評論區推薦。