TinyMCE 富文本編輯器在 vue2 中的使用 @tinymce/tinymce-vue

TinyMCE是一款功能強大、高度可定制的富文本編輯器。官方文檔?TinyMCE DOCS

tinymce-vue包的版本4及更高版本支持Vue.js 3。但不支持Vue.js 2.x。對于Vue.js 2。X應用程序,使用tinymce-vue版本3。

安裝TinyMCE和Vue集成包
npm install @tinymce/tinymce-vue@3 tinymce@5 --save

tinymce是英文的,所以需要從官網下載中文包:
地址:?Language Packages | Trusted Rich Text Editor | TinyMCE?

+

解壓出?zh_CN.js?

在 public 文件夾下新建一個 tinymce 的文件夾, 用來存放tinymce的文件

tinymce 文件夾中新建一個 langs 文件夾用來放語言包,
再從 node_modules 的?tinymce 中復制 skins 文件夾, 放到tinymce 文件夾下.?

使用
<template><div><div class="tinymce-box"><!--      <el-button @click="clickHandler">上傳視頻</el-button>--><Editorv-model="contentValue":init="init":disabled="disabled"@onClick="onClick"/></div></div>
</template><script>
//引入tinymce編輯器
import Editor from "@tinymce/tinymce-vue";//引入node_modules里的tinymce相關文件文件
import tinymce from "tinymce/tinymce"; //tinymce默認hidden,不引入則不顯示編輯器
import "tinymce/themes/silver"; //編輯器主題,不引入則報錯
import "tinymce/icons/default"; //引入編輯器圖標icon,不引入則不顯示對應圖標// 引入編輯器插件(基本免費插件都在這兒了)
import "tinymce/icons/default/icons";
import "tinymce/plugins/advlist"; //高級列表
import "tinymce/plugins/anchor"; //錨點
import "tinymce/plugins/autolink"; //自動鏈接
import "tinymce/plugins/autoresize"; //編輯器高度自適應,注:plugins里引入此插件時,Init里設置的height將失效
import "tinymce/plugins/autosave"; //自動存稿
import "tinymce/plugins/charmap"; //特殊字符
import "tinymce/plugins/code"; //編輯源碼
import "tinymce/plugins/codesample"; //代碼示例
import "tinymce/plugins/directionality"; //文字方向
import "tinymce/plugins/emoticons"; //表情
import "tinymce/plugins/fullpage"; //文檔屬性
// import "tinymce/plugins/fullscreen"; //全屏
import "tinymce/plugins/help"; //幫助
import "tinymce/plugins/hr"; //水平分割線
import "tinymce/plugins/importcss"; //引入css
import "tinymce/plugins/insertdatetime"; //插入日期時間
import "tinymce/plugins/link"; //超鏈接
import "tinymce/plugins/lists"; //列表插件
import "tinymce/plugins/media"; //插入編輯媒體
import 'tinymce/plugins/image'; // 插入圖片
import "tinymce/plugins/nonbreaking"; //插入不間斷空格
import "tinymce/plugins/pagebreak"; //插入分頁符
import "tinymce/plugins/paste"; //粘貼插件
import "tinymce/plugins/preview"; //預覽
import "tinymce/plugins/print"; //打印
import "tinymce/plugins/quickbars"; //快速工具欄
import "tinymce/plugins/save"; //保存
import "tinymce/plugins/searchreplace"; //查找替換
// import 'tinymce/plugins/spellchecker'  //拼寫檢查,未加入漢化,不建議使用
import "tinymce/plugins/tabfocus"; //切入切出,按tab鍵切出編輯器,切入頁面其他輸入框中
import "tinymce/plugins/table"; //表格
import "tinymce/plugins/template"; //內容模板
import "tinymce/plugins/textcolor"; //文字顏色
import "tinymce/plugins/textpattern"; //快速排版
import "tinymce/plugins/toc"; //目錄生成器
import "tinymce/plugins/visualblocks"; //顯示元素范圍
import "tinymce/plugins/visualchars"; //顯示不可見字符
import "tinymce/plugins/wordcount"; //字數統計
import { uploadImage, uploadVideo } from "@/api/fileApi"; export default {name: "TEditor",components: {Editor,},props: {value: {type: String,default: "",},disabled: {type: Boolean,default: false,},plugins: {type: [String, Array],default:"print preview searchreplace autolink directionality visualblocks visualchars fullscreen template code codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists image media wordcount textpattern autosave ",},toolbar: {type: [String, Array],default:"undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | \styleselect formatselect fontselect fontsizeselect | bullist numlist | lists image table | blockquote subscript superscript removeformat | \table hr pagebreak insertdatetime print preview | code selectall searchreplace visualblocks | indent2em lineheight formatpainter axupimgs",},},data() {return {dialogVisible: false,video: {},init: {language_url: "tinymce/langs/zh_CN.js", //引入語言包文件language: "zh_CN", //語言類型skin_url: "tinymce/skins/ui/oxide", //皮膚:淺色// skin_url: '/tinymce/skins/ui/oxide-dark',//皮膚:暗色plugins: this.plugins, //插件配置toolbar: this.toolbar, //工具欄配置,設為false則隱藏// menubar: 'file edit',  //菜單欄配置,設為false則隱藏,不配置則默認顯示全部菜單,也可自定義配置--查看 http://tinymce.ax-z.cn/configure/editor-appearance.php --搜索“自定義菜單”fontsize_formats:"12px 14px 16px 18px 20px 22px 24px 28px 32px 36px 48px 56px 72px", //字體大小font_formats:"微軟雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;蘋果蘋方=PingFang SC,Microsoft YaHei,sans-serif;宋體=simsun,serif;仿宋體=FangSong,serif;黑體=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;", //字體樣式lineheight_formats: "0.5 0.8 1 1.2 1.5 1.75 2 2.5 3 4 5", //行高配置,也可配置成"12px 14px 16px 20px"這種形式height: 275, //注:引入autoresize插件時,此屬性失效placeholder: "在這里輸入文字",branding: false, //tiny技術支持信息是否顯示resize: "both", //編輯器寬高是否可變,false-否,true-高可變,'both'-寬高均可,注意引號// statusbar: false,  //最下方的元素路徑和字數統計那一欄是否顯示elementpath: false, //元素路徑是否顯示content_style: "img {max-width:100%;}", //直接自定義可編輯區域的css樣式// content_css: '/tinycontent.css',  //以css文件方式自定義可編輯區域的css樣式,css文件需自己創建并引入// images_upload_url: '/apib/api-upload/uploadimg',  //后端處理程序的url,建議直接自定義上傳函數image_upload_handler,這個就可以不用了// images_upload_base_path: '/demo',  //相對基本路徑--關于圖片上傳建議查看--http://tinymce.ax-z.cn/general/upload-images.phppaste_data_images: true, //圖片是否可粘貼images_upload_handler: (blobInfo, success, failure) => {if (blobInfo.blob().size / 1024 / 1024 > 20) {failure("上傳失敗,圖片大小請控制在 20M 以內");} else {let formData = new FormData();formData.append("picture", blobInfo.blob());formData.append("action", "add")uploadImage({ formData }).then((res) => {console.log(res)console.log('/media/' + res.pic)success('/media/' + res.pic);}).catch(() => {failure("上傳出錯,服務器開小差了呢");});}},},contentValue: this.value,};},watch: {value(newValue) {this.contentValue = newValue;},contentValue(newValue) {this.$emit("input", newValue);},},created() {},mounted() {tinymce.init({});},methods: {/**獲取文件 */getFile(event) {this.video = event.target.files;this.$message.success("成功選擇文件");},/** 提交添加視頻請求*/addVideo() {var formData = new FormData();formData.append("file", this.video);console.log(formData.get("file"));uploadVideo(formData).then((res) => {if (this.contentValue === undefined) {tinymce.activeEditor.setContent(`<p><span class="mce-preview-object mce-object-video" contenteditable="false" data-mce-object="video" data-mce-p-allowfullscreen="allowfullscreen" data-mce-p-frameborder="no" data-mce-p-scrolling="no" data-mce-p-src=${res.location} "data-mce-html="%20"><video src=${res.location} width="100%" controls="controls"></video></span></p>`);} else {tinymce.activeEditor.setContent(this.contentValue +`<p><span class="mce-preview-object mce-object-video" contenteditable="false" data-mce-object="video" data-mce-p-allowfullscreen="allowfullscreen" data-mce-p-frameborder="no" data-mce-p-scrolling="no" data-mce-p-src=${res.location} "data-mce-html="%20"><video src=${res.location} width="100%" controls="controls"></video></span></p>`);}this.$message({type: "success",message: "添加成功",});}).catch(() => {this.$message({type: "error",message: "請先上傳視頻",});});},clickHandler() {this.dialogVisible = true;},handleClose() {this.dialogVisible = false;this.video = {};},// 添加相關的事件,可用的事件參照文檔=> https://github.com/tinymce/tinymce-vue => All available eventsonClick(e) {this.$emit("onClick", e, tinymce);},//清空內容clear() {this.contentValue = "";},},
};
</script><style lang="less">
.tox-notifications-container {display: none;
}.tox-tinymce-aux {z-index: 5000 !important;
}
</style>

獲取純文本內容

tinymce().activeEditor.getContent({ format: 'text' });
或是
this.$refs.myTinyMce.getContent({ format: 'text' });

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

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

相關文章

LP-MSPM0G3507學習--04GPIO控制

關鍵函數&#xff1a; DL_GPIO_readPins(GPIO_Regs* gpio, uint32_t pins):同時讀一組端口DL_GPIO_writePins(GPIO_Regs* gpio, uint32_t pins)&#xff1a;同時寫一組端口DL_GPIO_setPins(GPIO_Regs* gpio, uint32_t pins)&#xff1a;對指定某組端口的某管腳置高DL_GPIO_cle…

LVS(Linux virtual server)-實現四層負載均衡

一、簡介LVS:Linux Virtual Server&#xff0c;負載調度器&#xff0c;內核集成&#xff0c;章文嵩&#xff0c;阿里的四層SLB(Server LoadBalance)是基 于LVSkeepalived實現LVS 官網: http://www.linuxvirtualserver.org/二、LVS運行原理2.1LVS 的集群結構2.2lvs相關概念RS&am…

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐 CNI&#xff08;Container Network Interface&#xff09;是 Kubernetes 網絡層的核心組件&#xff0c;不同 CNI 插件實現了容器間網絡通信、多租戶隔離、流量限速等功能。然而在大規模集群或高并發業務場景下&#xff0c;CNI 插…

20250720-6-Kubernetes 調度-nodeName字段,DaemonS_筆記

一、污點與容忍&#xfeff;1. 給節點添加污點&#xfeff;1&#xff09;命令格式基本語法&#xff1a;kubectl taint node [node] keyvalue:[effect]示例&#xff1a;kubectl taint node k8s-node1 gpuyes:NoSchedule操作說明&#xff1a;與打標簽命令類似&#xff0c;將"…

微軟開源項目 Detours 詳細介紹與使用實例分享

目錄 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours應用場景 5、Detours兼容性 6、Detours具體使用方法 7、Detours使用實例 - 使用Detours攔截系統庫中的UnhandledExceptionFilter接口,實現對程序異常的攔截 C++軟件異常排查從入門到精通系列教程…

研發知識系統選型實戰:從 Notion 到 Gitee Wiki 的迭代經驗

關鍵詞&#xff1a;知識管理、版本控制、協作編輯、國產平臺、研發效能 在日常研發管理中&#xff0c;知識管理平臺往往被視為“非核心工具”&#xff0c;但它的好壞直接影響著團隊交接效率、文檔可用性以及協作深度。過去幾年&#xff0c;我們團隊先后使用過 Notion、Confluen…

從一開始的網絡攻防(三):sqlmap快速上手

一、確定目標 使用sqlmap的第一步是確定探測的目標&#xff0c;一般有四種&#xff1a; 數據庫URL文件Google批量掃 環境 Target IP: 192.168.8.133 Port: 13306(Mysql)、8088(sqli_labs) mysql&#xff1a; docker pull的最新mysql sqlmap github&#xff1a;https://g…

《Anaconda 精簡路徑治理》系列 · 番外篇Conda 虛擬環境路徑結構方案全解——六種路徑布局對比、優劣與治理建議

Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自治 原則-CSDN博客 Anaconda 路徑精簡后暴露 python 及工具到環境變量的配置記錄-CSDN博客 【終極實戰】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具協同 AnacondaPyCharm&#xff1a;構建…

容器基礎知識3-kubectl、kubeadm 和 kubelet,kube-proxy

kubectl、kubeadm 和 kubelet&#xff0c;kube-proxy的概念和關系一、kubeadm&#xff1a;K8s 集群的 “搭建工程師”核心定位如果把 K8s 集群比作一棟大樓&#xff0c;kubeadm 就是負責 “打地基、搭框架” 的工程師&#xff0c;專門用來快速搭建 K8s 集群的工具。具體工作內容…

langchain調用本地ollama語言模型和嵌入模型

參考&#xff1a;ollama兼容OpenAIEmbeddings的解決思路 解決代碼&#xff1a; 訪問embedding模型代碼 # 測試以下兩個引用都可以 from langchain_openai import OpenAIEmbeddings #from langchain_community.embeddings import OpenAIEmbeddings from typing import List,…

gitlab私有化部署

以下是整理好的Markdown格式文檔&#xff0c;詳細描述了從下載鏡像、啟動鏡像、修改external_url以及設置或重置root密碼的步驟。 GitLab 安裝與配置指南 本文檔將指導您完成GitLab的安裝和基本配置過程&#xff0c;包括下載鏡像、啟動容器、修改外部訪問URL(external_url)及設…

CCLink IE轉ModbusTCP網關配置無紙記錄器(上篇)

本研究案例采用CCLink IE轉ModbusTCP網關技術&#xff0c;實現了將記錄儀數據傳輸至三菱PLCPLC的過程。具體操作步驟如下所述。在確保無紙記錄儀與PT100傳感器傳感器的連接無誤后&#xff0c;應將無紙記錄儀與個人計算機&#xff08;PC&#xff09;通過以太網線進行連接&#x…

近期工作感想:職業規劃篇

最近整理博客時&#xff0c;撞見意外的驚喜——17年剛畢業那會兒寫的職業規劃&#xff0c;靜靜躺在回收站里。 重讀那些碎碎念&#xff0c;忍不住想笑&#xff1a;那時候的焦慮太真切了&#xff0c;哪敢想后來會遇到這么多大佬&#xff0c;推著我往前一直陰暗爬行&#x1f602;…

Matlab自學筆記六十四:求解自變量帶有約束條件的方程

1.說明 有一些方程由于實際問題的需要&#xff0c;需要設置一些限制約束條件&#xff0c;例如x>0等&#xff0c;若使用Matlab編程求解&#xff0c;首先嘗試使用符號運算求解&#xff08;符號運算可參考文章54&#xff1a;Matlab自學筆記五十四&#xff1a;符號數學工具箱和…

Flutter狀態管理篇之ChangeNotifier(二)

目錄 前言 一、ChangeNotifier定義 1.ChangeNotifier定義 2.Listenable的定義 二、繼承體系 三、核心方法解析 1.類結構與屬性分析 1.Listenable的定義 2..核心字段 1.屬性解析 1._count 2._listeners 3.為什么不用const [] 4._notificationCallStackDep…

大帶寬服務器對于高流量網站的作用

隨著科學技術的快速發展&#xff0c;越來越多的網站面臨著高流量的訪問需求&#xff0c;在同一時間中會有著大量的用戶進行訪問&#xff0c;同時也提高了該企業的知名度&#xff0c;但是這對于服務器的性能需求也在逐漸增高&#xff0c;而大帶寬服務器卓越的性能和穩定的傳輸能…

2025年算法備案發號規律總結與下半年發號預測

上半年發號規律總結圖太糊&#xff1f;可看下方表格&#xff08;左劃看全表&#xff09;&#x1f447;今年批次算法備案總批次發布時間所發當批算法材料提交時間段審核周期25年第一批第十批2025/3/122025年1月&#xff08;春節前&#xff09;約2個月25年第二批第十一批2025/5/1…

高光譜相機(Hyperspectral Camera)

高光譜相機&#xff08;Hyperspectral Camera&#xff09;高光譜相機&#xff1a;是一種可以采集連續、多達上百個窄波段的光譜信息的成像設備。它的核心特征是&#xff1a;每個像素點都擁有一個完整的光譜曲線&#xff0c;類似于“像素級別的光譜儀”。舉例&#xff1a;普通彩…

經典排序算法之歸并排序(Merge Sort)

歸并算法定義&#xff1a;所謂歸并排序是指將兩個或兩個以上有序的數列&#xff08;或有序表&#xff09;&#xff0c;合并成一個仍然有序的數列&#xff08;或有序表&#xff09;。這樣的排序方法經常用于多個有序的數據文件歸并成一個有序的數據文件。歸并排序相比較之前的排…

Linux系統環境下 Node.js 20 安裝實踐:glibc 2.17 兼容方案與工具鏈優化

前言&#xff1a;在 CentOS 7.9 的生產環境中&#xff0c;默認搭載的 glibc 2.17 是系統的核心依賴&#xff0c;直接升級它可能引發穩定性風險。而 Node.js 20 作為較新的運行時&#xff0c;其與 glibc 的兼容性長期困擾著開發者&#xff1a;為什么有些場景下 Node.js 20 能直接…