vue3項目中使用富文本編輯器

前言

適配 Vue3 的富文本插件不多,我看了很多插件官網,也有很多寫的非常棒的,有UI非常優雅讓人耳目一新的,也有功能非常全面的。
如:

  1. Quill,簡單易用,功能全面。
  2. editorjs,UI極其優雅,非常好看。
  3. ckeditor-5,一款完全重寫的富文本編輯器,支持現代 Web 標準,例如模塊化架構、原生語義化輸出等。

還有很多優秀的富文本編輯器插件,就不一一列舉了。

可惜這些都只有英文原文檔,對于我這樣英語閱讀能力不是很好的人來說,實在是一種煎熬,當然也是因為周期比較短,沒有時間去研究,所以選擇了這一款易上手的插件 wangEditor。

推薦原因有二:

  1. wangEditor 有詳細的中文文檔,以及中文交流環境。因為作者就是國內程序員。
  2. wangEditor 基于 slate 內核開發,但不依賴于 React ,所以它本身無框架依賴。

一、安裝

安裝 wangeditor 插件

npm install @wangeditor/editor --save
# yarn add @wangeditor/editor

安裝 Vue3 組件

npm install @wangeditor/editor-for-vue@next --save
# yarn add @wangeditor/editor-for-vue@next

二、使用

1. 簡單使用

這個組件使用起來非常簡單,如果只想簡單使用,按照下面的實例,即可實現:

<template><div style="border: 1px solid #ccc"><Toolbarstyle="border-bottom: 1px solid #ccc":editor="editorRef":defaultConfig="toolbarConfig":mode="mode"/><Editorstyle="height: 500px; overflow-y: hidden;"v-model="valueHtml":defaultConfig="editorConfig":mode="mode"@onCreated="handleCreated"/></div>
</template>
<script>
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { onBeforeUnmount, ref, shallowRef } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'export default {components: { Editor, Toolbar },setup() {// 編輯器實例,必須用 shallowRefconst editorRef = shallowRef()// 內容 HTMLconst valueHtml = ref('')const toolbarConfig = {}const editorConfig = { placeholder: '請輸入內容...' }// 組件銷毀時,也及時銷毀編輯器onBeforeUnmount(() => {const editor = editorRef.valueif (editor == null) returneditor.destroy()})const handleCreated = (editor) => {editorRef.value = editor // 記錄 editor 實例,重要!}return {editorRef,valueHtml,mode: 'default', // 或 'simple'toolbarConfig,editorConfig,handleCreated};}
}
</script>  

以上,即可實現最簡單的富文本編輯功能,valueHtml 就是富文本編輯的內容,只需要使用 v-html 指令即可將其渲染。

2. 配置菜單欄

上面的實例很多功能不完善,只有最原始的功能,如果需要更加豐富的功能,需要對菜單欄進行自定義編輯。

<template><div class="edit"><Toolbar class="Toolbar" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" /><Editor class="Editor" :defaultConfig="editorConfig" :mode="mode" v-model="valueHtml" @onCreated="handleCreated" @customPaste="customPaste" /></div>
</template>

三、自定義圖片\視頻上傳功能

自帶圖片上傳功能文檔

自帶的圖片、視頻上傳服務可能無法 適用與真實的開發場景,所以對這一塊的功能進行自定義是必然的。

在同一頁面公共地方寫 editorConfig.MENU_CONF['uploadImage'] 方法,上傳圖片、視頻時會自動觸發,可以同時選擇多張照片上傳,圖片會一張一張上傳。

// 自定義圖片上傳
editorConfig.MENU_CONF['uploadImage'] = {async customUpload(file, insertFn) {let formData = new FormData();formData.append('files', file);try {// 這里結合實際場景寫自己上傳圖片的邏輯,此處代碼僅為示例const { data } = await upload(formData);// 對圖片進行處理,同樣需要結合實際場景data.forEach(item => {insertFn(item, 'image', item)})} catch (error) {console.log(error);}}
}// 自定義視頻上傳
editorConfig.MENU_CONF['uploadVideo'] = {async customUpload(file, insertFn) {let formData = new FormData();formData.append('files', file);try {// 這里結合實際場景寫自己上傳圖片的邏輯,此處代碼僅為示例const { data } = await upload(formData);// 對圖片進行處理,同樣需要結合實際場景data.forEach(item => {insertFn(item, 'video')})} catch (error) {console.log(error);}}
}

注意

  1. 圖片無法控制具體寬度,只能按照比例確定寬度
  2. 圖片默認為自身100%寬度,如需限制,可以在盒子外層使用 !important

常見錯誤

  1. vue-router.mjs:3471 Error: Module build failed (from ./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js): TypeError: Cannot read property 'content' of null
    在這里插入圖片描述
    可能是 vue-loader 版本有問題,較低或較高都有可能;也有可能是寫法有問題,建議仔細檢查代碼,這個問題在 ts 中很容易出現。

四、復制粘貼功能

這個功能原本就有,默認會攜帶格式,如需去除,可以對齊進行修改和限制。以下示例為粘貼純文本,如果更多限制,可以自行改寫。

const customPaste = (editor, event, callback) => {const text = event.clipboardData.getData('text/plain') // 獲取粘貼的純文本if (text) {editor.insertText(text)event.preventDefault()callback(false)}
}

如需作者補充或修改,歡迎在評論區留言。
END

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161627.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echarts的橫向柱狀圖文字省略,鼠標移入顯示內容 vue3

效果圖 文字省略 提示 如果是在x軸上的&#xff0c;就在x軸上添加triggerEvent: true,如果是y軸就在y軸添加&#xff0c;我是在y軸上添加的 并且自定義的方法&#xff08;我取名為extension&#xff09; // echarts 橫向省略文字 鼠標移入顯示內容 export const extension…

AT89S52單片機的最小應用系統

目錄 ?一.時鐘電路設計 1.內部時鐘方式 2.外部時鐘方式 3.時鐘信號的輸出 二.機器周期&#xff0c;指令周期與指令時序 1.時鐘周期 2.機器周期 3.指令周期 三.復位操作和復位電路 1.復位操作 2 復位電路設計 四.低功耗節電模式 AT89S52本身片內有8KB閃爍存儲器&am…

Redisson分布式鎖源碼解析

一、使用Redisson步驟 Redisson各個鎖基本所用Redisson各個鎖基本所用Redisson各個鎖基本所用 二、源碼解析 lock鎖 1&#xff09; 基本思想&#xff1a; lock有兩種方法 一種是空參 另一種是帶參 * 空參方法&#xff1a;會默認調用看門狗的過期時間30*1000&…

kubernetes|云原生|Deployment does not have minimum availability 的解決方案(資源隱藏的由來)

前言&#xff1a; 最近在部署prometheus的過程中遇到的這個問題&#xff0c;感覺比較的經典&#xff0c;有必要記錄一下。 現象是部署prometheus主服務的時候&#xff0c;看不到pod&#xff0c;只能看到deployment&#xff0c;由于慌亂&#xff0c;一度以為是集群有毛病了&am…

c# 基礎語法

c# 程序結構 using System.Collections.Generic; namespace demo1; //一個命名空間可以包含多個類 using System.IO; using System.Drawing;class proj {/// <summary>/// c#是微軟開發的&#xff0c;基于c和c的一種面象對象編程語言&#xff0c;用于快速開發windows桌…

真實網絡中的 bbr

本文包含中心極限定理&#xff0c;大數定律&#xff0c;經濟規律等&#xff0c;bbr 倒沒多少&#xff0c;不過已經習慣把 bbr 當靶子了。 上周寫了 揭秘 bbr 以及 搶帶寬的原理&#xff0c;我對自己說&#xff0c;這都是理論上如何&#xff0c;可實際上呢。于是有必要結合更實際…

ubuntu cutecom串口調試工具使用方法(圖形界面)

文章目錄 Ubuntu下使用CuteCom進行串口調試使用指南什么是CuteCom&#xff1f;主要特點 安裝CuteCom使用APT包管理器從源碼編譯安裝 配置串口CuteCom界面解析&#xff08;啟動cutecom&#xff09;使用CuteCom進行數據發送和接收配置串口參數數據接收數據發送 高級功能和技巧流控…

Vatee萬騰的數字化掌舵:Vatee科技解決方案的全面引領

隨著數字化時代的到來&#xff0c;Vatee萬騰憑借其卓越的科技實力和全面的解決方案&#xff0c;成功地在數字化探索的航程中掌舵引領。 首先&#xff0c;Vatee萬騰以其強大的數字化科技實力成為行業的引領者。vatee萬騰不僅在人工智能、大數據分析、云計算等前沿領域取得了顯著…

PLC通過Modbus轉Profinet網關連接安華變頻器通訊控制電機案例

背景&#xff1a;近年來&#xff0c;隨著自動化技術的不斷進步&#xff0c;Modbus與Profinet之間的轉換成為了許多工廠和企業普遍關注的問題。 Modbus轉Profinet網關作為兩個不同協議設備連接的橋梁&#xff0c;安華變頻器作為一種電氣設備&#xff0c;能夠改變電源的頻率和電…

負載均衡lvs

簡介 ipvsadm 是 Linux 內核中的 IP 虛擬服務器&#xff08;IPVS&#xff09;管理工具。IPVS是 Linux 內核提供的一種負載均衡解決方案&#xff0c;它允許將入站的網絡流量分發到多個后端服務器&#xff0c;以實現負載均衡和高可用性。IPVS通過在內核中維護一個虛擬服務器表&a…

Pytorch中的tensor維度理解

Pytorch中的tensor維度理解 文章目錄 Pytorch中的tensor維度理解摘要打消心理恐懼&#xff0c;從三維學起三維tensor參考文獻 摘要 面對pytorch編程中的tensor時&#xff0c;我不時會感到恐懼。對里面數據是怎么排布的&#xff0c;一直沒有一個直觀的理解。今天我想把這個事情…

springboot(ssm中醫學習服務管理系統 醫學生在線學習平臺Java(codeLW)

springboot(ssm中醫學習服務管理系統 醫學生在線學習平臺Java(code&LW) 開發語言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服務器&#xff1a;tomcat 數據庫&#xff1a;mysql 5.7&#xff08;或…

基于VM虛擬機下Ubuntu18.04系統,Hadoop的安裝與詳細配置

參考博客&#xff1a; https://blog.csdn.net/duchenlong/article/details/114597944 與上面這個博客幾乎差不多&#xff0c;就是java環境配置以及后面的hadoop的hdfs-site.xml文件有一些不同的地方。 準備工作 1.更新 # 更新 sudo apt update sudo apt upgrade2.關閉防火…

MS2401隔離Σ-Δ調制器,可替代ADI的AD7401

產品簡述 MS2401 是一款二階 Σ-Δ 調制器&#xff0c;集成片上數字隔離器&#xff0c;能 將模擬輸入信號轉換為高速 1 位碼流。調制器對輸入信號連續 采樣&#xff0c;無需外部采樣保持電路。模擬信號輸入滿量程為 320 mV &#xff0c;轉換后的數字碼流的最高數據速率為 2…

C++ Boost Thread 編程總結

1.前言 標準C線程即將到來。CUJ預言它將衍生自Boost線程庫&#xff0c;現在就由Bill帶領我們探索一下Boost線程庫。 就在幾年前&#xff0c;用多線程執行程序還是一件非比尋常的事。然而今天互聯網應用服務程序普遍使用多線程來提高與多客戶鏈接時的效率&#xff1b;為了達到最…

統計voc格式數據中的xml標簽、bndbox到excel表格中

有這么個需求是將xml的內容: 1,filename 2.label 3.bndbox:xmin,xmax,ymin,ymax。 … 將這些東西寫入excel表格中,方便我統計標簽數量和框的分布! 于是撰寫了腳本:xml2csv.py 我的xml文件形式如下。大家的目標檢測格式大同小異! <annotation><folder>UAV_d…

【MySQL】多表查詢、子查詢、自連接、合并查詢詳解,包含大量示例,包你會。

復合查詢 前言正式開始一些開胃菜多表查詢自連接子查詢單行子查詢多行子查詢in關鍵字all關鍵字any關鍵字多列子查詢在from中使用子查詢 合并查詢union 和 union all 前言 我前面博客講的所有的查詢都是在單表中進行的&#xff0c;從這里開始就要專門針對查詢這個話題進行進一步…

ansible學習

一文掌握 Ansible 自動化運維 - 知乎 ansible的安裝與簡單的使用_堅持到所有人都放棄!!!的技術博客_51CTO博客

GIT | 基礎操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤銷修改 | 刪除文件

GIT | 基礎操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤銷修改 | 刪除文件 文章目錄 GIT | 基礎操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤銷修改 | 刪除文件前言一、安裝git二、git基本操作2.1 初始化git2.2 配置局部生效2.3 配置全局生效 三、認識工作區…

淺談堆和棧內存以及編程語言

淺談堆和棧內存以及編程語言 棧和堆C 和 C# 的區別&#xff1a;C#總結 編程語言C匯編語言&#xff08;Assembly Language&#xff09;&#xff1a;機器語言&#xff08;Machine Language&#xff09;&#xff1a; 拓展C#依賴注入&#xff08;Dependency Injection&#xff09;模…