Vue使用Tinymce 編輯器

目錄

    • 一、下載并重新組織tinymce結構
    • 二、使用
    • 三、遇到的坑

一、下載并重新組織tinymce結構

  • 下載
npm install tinymce@^7
or
yarn add tinymce@^7
  • 重構目錄

    在node_moudles里找到tinymce文件夾,把里面文件拷貝一份放到public下,如下:

-- publicpluginstinymceiconsmodelspluginsskinsthemes

在這里插入圖片描述
不這么做的話 只引入tinymce是沒有辦法自動引入正確的插件路徑,控制臺會報一堆錯:

Uncaught SyntaxError: Unexpected token '<' (at theme.js:1:1) 
Uncaught SyntaxError: Unexpected token '<' (at model.js:1:1) 
Uncaught SyntaxError: Unexpected token '<' (at icons.js:1:1)
  • language 、 editimage插件引入方法
    此時,還缺少language和editimage插件如果需要的話,可以從這里找language。
    editimage的話,因為是收費的,所以我在他們官網上針對editimage插件使用Demo進行爬取
    在這里插入圖片描述
    然后editimage放入tinymce自己的組件里,仿照他的樣子自己搞
    在這里插入圖片描述
// index.js
require('./plugin.js');
// plugin.js
...

此時還會報一個錯,就是editimage下的language找不到,那就把上面的文件拿過來放到對應的位置即可,所以你會看到我的文件里還多了一個language。
到此為止準備階段算是完了。

二、使用

此時可以直接引用tinymce,自動引入會根據base_url進行查找,我們剛才把準備工作做好了,可以直接設置

<template><div style="height:100vh"><textarea id="tinymce"></textarea></div>
</template>
<script>
import tinymce from "tinymce";
export default{data(){return{editor:null,}},mounted(){tinymce.init({selector: "#tinymce",license_key: 'gpl',height:'100%',base_url:'plugins/tinymce/',// 設置資源根路徑language: 'zh_CN', // 設置語言為中文language_url: 'plugins/tinymce/langs/zh_CN.js', // 這里的地址指向 public 目錄下的路徑plugins: 'quickbars preview importcss image editimage searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap emoticons accordion',toolbar: " undo redo | shot copy paste | accordion accordionremove | fontselect styleselect fontsize | bold italic underline strikethrough | align numlist bullist | link image | table media | lineheight outdent indent| forecolor backcolor removeformat | charmap emoticons | code fullscreen preview | save print | pagebreak anchor codesample | ltr rtl ",editimage_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',fontsize_formats: '12px 14px 16px 18px 20px 22px 24px 26px 36px 48px 56px', // 工具欄自定義字體大小選項font_formats: "微軟雅黑='微軟雅黑'; 宋體='宋體'; 黑體='黑體'; 仿宋='仿宋'; 楷體='楷體'; 隸書='隸書'; 幼圓='幼圓'; 方正舒體='方正舒體'; 方正姚體='方正姚體'; 等線='等線'; 華文彩云='華文彩云'; 華文仿宋='華文仿宋'; 華文行楷='華文行楷'; 華文楷體='華文楷體'; 華文隸書='華文隸書'; Andale Mono=andale mono,times; Arial=arial; Arial Black=arial black;avant garde; Book Antiqua=book antiqua;palatino; Comic Sans MS=comic sans ms; Courier New=courier new;courier; Georgia=georgia; Helvetica=helvetica; Impact=impact;chicago; Symbol=symbol; Tahoma=tahoma;arial; sans-serif; Terminal=terminal,monaco; Times New Roman=times new roman,times; Trebuchet MS=trebuchet ms; Verdana=verdana;geneva; Webdings=webdings; Wingdings=wingdings", // 工具欄自定義字體選項branding: false, // 去掉編輯器右下角的廣告menubar: false,paste_data_images: true,highlight_on_focus: false,// 邊框高亮contextmenu: "",//右鍵菜單content_style:"",//純css代碼,控制iframe內的文檔toolbar_location: "top",editimage_toolbar: ' customAIDuiHuaButton |rotateleft rotateright | flipv fliph | editimage imageoptions',//選擇圖片時的toolbarquickbars_insert_toolbar: false,//插入時是否展示快捷鍵quickbars_selection_toolbar: 'customAIDuiHuaButton customAIButton bold italic underline fontsize forecolor numlist blockquote ',選擇時展示的快捷鍵save_onsavecallback: () => {//保存時才會有的鉤子函數,保存回調// 解決保存時,觸發的找不到form表單的提示console.log('Saved');_this.$emit('save');},init_instance_callback:(editor)=>{//初始化回調this.editor=editor;// 設置初始值let content = '中國萬歲,共產黨萬歲!!!';editor.setContent(content, {format: 'html'})},setup: (editor) => {// 編輯器監聽內容改變,和input的change事件不同,官網上解釋是除了其他操作外,輸入文字不會立即觸發,而是只有焦點不在編輯器上是才會觸發editor.on('change',(e)=>{this.$emit("update:value", editor.getContent({format:'html'}));})// 注冊一個圖標editor.ui.registry.addIcon('shot-cut', '<svg t="1733897029101" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5750" width="24" height="24"><path d="M715.98 634.01h80.07V308.02c0-21.61-7.94-40.35-23.83-56.24-15.89-15.89-34.63-23.83-56.24-23.83H389.99v80.07h325.99v325.99z m-407.96 81.97V64h-80.07v163.95H64v80.07h163.95v407.97c0 21.6 7.94 40.35 23.83 56.24 15.89 15.89 34.63 23.83 56.24 23.83h407.97V960h80.07V796.05H960v-80.07H308.02z" p-id="5751"></path></svg>');editor.ui.registry.addButton('shot', {icon:'shot-cut',//使用這個圖標tooltip:'截屏',onAction: (_) => {// TO-DO}});editor.ui.registry.addIcon('ai', '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n' + '<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3C3.34315 3 2 4.34315 2 6V18C2 19.6569 3.34315 21 5 21H19C20.6569 21 22 19.6569 22 18V6C22 4.34315 20.6569 3 19 3H5ZM11.8038 14.4512L12.2652 15.6641C12.3268 15.8135 12.3993 15.9871 12.4828 16.1849C12.5707 16.3782 12.652 16.5233 12.7267 16.6199C12.8014 16.7122 12.8937 16.7847 13.0035 16.8375C13.1134 16.8946 13.2452 16.9232 13.399 16.9232C13.6627 16.9232 13.8868 16.8309 14.0714 16.6463C14.2604 16.4573 14.3548 16.2508 14.3548 16.0267C14.3548 15.8113 14.256 15.4664 14.0582 14.9918L11.5336 8.75593C11.4149 8.44392 11.316 8.19563 11.2369 8.01105C11.1622 7.82209 11.0677 7.64631 10.9535 7.48371C10.8436 7.32111 10.6964 7.18928 10.5118 7.0882C10.3316 6.98273 10.1053 6.93 9.83287 6.93C9.5648 6.93 9.33849 6.98273 9.15392 7.0882C8.97374 7.18928 8.82652 7.32331 8.71227 7.4903C8.6024 7.6573 8.49693 7.86823 8.39586 8.12312C8.29918 8.3736 8.21568 8.58894 8.14537 8.76911L5.67345 15.0445C5.57237 15.295 5.49986 15.4905 5.45592 15.6312C5.41197 15.7718 5.39 15.908 5.39 16.0399C5.39 16.2684 5.48448 16.4727 5.67345 16.6529C5.86241 16.8331 6.07994 16.9232 6.32603 16.9232C6.61607 16.9232 6.82481 16.8397 6.95226 16.6727C7.0797 16.5013 7.23351 16.1739 7.41368 15.6905L7.87511 14.4512H11.8038ZM9.81969 8.99323L11.2765 12.9813H8.38927L9.81969 8.99323ZM15.3775 8.11652V15.73C15.3775 16.1256 15.4676 16.4244 15.6478 16.6265C15.8324 16.8243 16.0653 16.9232 16.3465 16.9232C16.641 16.9232 16.8783 16.8243 17.0585 16.6265C17.243 16.4288 17.3353 16.13 17.3353 15.73V8.11652C17.3353 7.71662 17.243 7.41999 17.0585 7.22663C16.8783 7.02888 16.641 6.93 16.3465 6.93C16.0609 6.93 15.828 7.02888 15.6478 7.22663C15.4676 7.42439 15.3775 7.72102 15.3775 8.11652Z" fill="rgba(180, 104, 106, 1.000)"/>\n' +'</svg>');editor.ui.registry.addButton('customAIDuiHuaButton', {icon: 'ai',text: '小Q對話',onAction:()=>{// TO-DO	}});editor.ui.registry.addMenuButton('customAIButton', {icon: 'ai',text: 'AI工具',fetch:(callback)=>{const items = [{type: 'menuitem',text: '續寫',onAction: (_) =>{// TO-DO}},{type: 'menuitem',text: '續寫',getSubmenuItems: () => [{type: 'menuitem',text: '輕松詼諧',onAction: (_) => {// TO-DO}},{type: 'menuitem',text: '商務正式',onAction: (_) => {// TO-DO}}]}];callback(items)}});}})}
}
</script>

三、遇到的坑

  • 如果遇到了tab切換,tinymce需要手動銷毀,否則無法使用,所以在初始化的時候需要進行remove。
mounted() {this.$nextTick(v=>{this.render();})},
methods:{render(){tinymce.remove('#'+this.tinymceId);tinymce.init(this.options)},
}
  • save的時候報錯,form表單找不到,解決辦法
data(){return {options:{//...save_onsavecallback: () => {//保存時才會有的鉤子函數,保存回調// 解決保存時,觸發的找不到form表單的提示console.log('Saved');_this.$emit('save');},//...}}
}

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

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

相關文章

odoo中@api.model, @api.depends和@api.onchange 裝飾器的區別

文章目錄 1. api.model用途特點示例 2. api.depends用途特點示例 3. api.onchange用途特點示例 總結 在 Odoo 中&#xff0c;裝飾器&#xff08;decorators&#xff09;用于修飾方法&#xff0c;以指定它們的行為和觸發條件。api.model、api.depends 和 api.onchange 是三個常用…

EMNLP'24 最佳論文解讀 | 大語言模型的預訓練數據檢測:基于散度的校準方法

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; 點擊 閱讀原文 觀看作者講解回放&#xff01; 作者簡介 張偉超&#xff0c;中國科學院計算所網絡數據科學與技術重點實驗室三年級直博生 內容簡介 近年來&#xff0c;大語言模型&#xff08;LLMs&#xff09;的…

大數據技術-Hadoop(一)Hadoop集群的安裝與配置

目錄 一、準備工作 1、安裝jdk&#xff08;每個節點都執行&#xff09; 2、修改主機配置 &#xff08;每個節點都執行&#xff09; 3、配置ssh無密登錄 &#xff08;每個節點都執行&#xff09; 二、安裝Hadoop&#xff08;每個節點都執行&#xff09; 三、集群啟動配置&a…

PilotGo

title: 解鎖 PilotGo&#xff1a;智能化運維的得力助手 date: ‘2024-12-29’ category: blog tags: PilotGo運維管理智能化工具技術應用 sig: ops archives: ‘2024-12’ author:way_back summary: PilotGo 作為一款創新的運維管理工具&#xff0c;憑借其智能化的特性和豐富的…

折騰日記:如何讓吃灰筆記本發揮余熱——搭建一個相冊服務

背景 之前寫過&#xff0c;我在家里用了一臺舊的工作站筆記本做了服務器&#xff0c;連上一個綠聯的5位硬盤盒實現簡單的網盤功能&#xff0c;然而&#xff0c;還是覺的不太理想&#xff0c;比如使用filebrowser雖然可以備份文件和圖片&#xff0c;當使用手機使用網頁&#xf…

使用seata實現分布式事務管理

配置 版本說明&#xff1a;springCloud Alibaba組件版本關系 我用的是spring cloud Alibaba 2.2.1.RELEASE 、springboot 2.2.1.RELEASE、nacos 2.0.1、seata1.2.0,jdk1.8 seata 主要用于在分布式系統中對數據庫進行事務回滾&#xff0c;保證全局事務的一致性。 seata的使用…

【總結】動態規劃

線性dp LeetCode題單&#xff0c; 從記憶化搜索到遞推 Pre&#xff1a; 從最初狀態到最終狀態等價&#xff0c;那么從最終狀態開始和最初狀態開始結果一樣。 遞歸時不會產生其他負面結果&#xff0c;即無論何時進入遞歸&#xff0c;只要遞歸參數相同&#xff0c;結果就相同。 …

RabbitMQ中的異步Confirm模式:提升消息可靠性的利器

在現代分布式系統中&#xff0c;消息隊列&#xff08;Message Queue&#xff09;扮演著至關重要的角色&#xff0c;它能夠解耦系統組件、提高系統的可擴展性和可靠性。RabbitMQ作為一款廣泛使用的消息隊列中間件&#xff0c;提供了多種機制來確保消息的可靠傳遞。其中&#xff…

買賣預測工具

設計一個用于在交易市場中尋找確定性或大概率盈利的買賣預測工具是一個具有挑戰性但非常有潛力的項目。你可以通過以下幾個步驟進行思路規劃&#xff1a; 1. 明確目標 大概率盈利&#xff1a;工具的目的是找出大概率盈利的交易機會。不能完全依賴于100%確定性&#xff0c;因為…

【數據結構】數據結構簡要介紹

數據結構是計算機科學中用于組織、管理和存儲數據的方式&#xff0c;以便于高效地訪問和修改數據。 數據結構的分類&#xff1a; 數據結構可以大致分為兩類&#xff1a;線性結構和非線性結構。 1. 線性結構 線性結構中的數據按順序排列&#xff0c;每個元素有唯一的前驅和后…

note 41:賬務系統開發規范

目錄 系統設計 防重控制 流量控制 并發控制 異常處理 備份機制 系統開發??????? 前端隊列操作 外系統交互 ?????????????? 系統設計 防重控制 對于進入到系統中的數據&#xff08;文件導入、手工錄入、系統直連等&#xff09;以及本系統發往外…

Circular Spanning Tree(樹的性質)

Circular Spanning Tree 本道題目加深理解樹的性質&#xff1a; 思路&#xff1a; 首先考慮什么情況是NO&#xff0c;那么不難想當字符串全是0的時候一定是不行的&#xff0c;因為這樣就構成環了&#xff0c;還有一種情況是1的個數為奇數的時候是不行的&#xff0c;一棵樹中為…

linux安裝nginxs報錯:openssl not found

系統&#xff1a; linux 版本&#xff1a;centOS7 nginx版本&#xff1a;nginx-1.20.2 linux安裝nginx時 執行下面命令時報錯&#xff1a; ./configure --with-http_stub_status_module --with-http_ssl_module --prefix/usr/local/nginxchecking for OpenSSL library ... not …

【論文筆記】Contrastive Learning for Sign Language Recognition and Translation

&#x1f34e;個人主頁&#xff1a;小嗷犬的個人主頁 &#x1f34a;個人網站&#xff1a;小嗷犬的技術小站 &#x1f96d;個人信條&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為往圣繼絕學&#xff0c;為萬世開太平。 基本信息 標題: Contrastive Learning for…

docker redis安裝

一.鏡像拉取 docker pull redis:5.0新建文件 touch /home/redis/redis.conf touch /home/redis/redis_6379.pid # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepali…

【CSS in Depth 2 精譯_096】16.4:CSS 中的三維變換 + 16.5:本章小結

當前內容所在位置&#xff08;可進入專欄查看其他譯好的章節內容&#xff09; 第五部分 添加動效 ??【第 16 章 變換】 ?? 16.1 旋轉、平移、縮放與傾斜 16.1.1 變換原點的更改16.1.2 多重變換的設置16.1.3 單個變換屬性的設置 16.2 變換在動效中的應用 16.2.1 放大圖標&am…

小程序租賃系統開發的優勢與實踐探索

內容概要 小程序租賃系統開發正在引起廣泛關注&#xff0c;特別是在數字化快速發展的今天。很多企業開始意識到&#xff0c;小程序不僅能為他們帶來更多的客戶&#xff0c;還能極大地提高管理效率。借助小程序&#xff0c;用戶在租賃時可以更加方便地瀏覽和選擇產品&#xff0…

機器人C++開源庫The Robotics Library (RL)使用手冊(二)

由于RL庫采用跨平臺CMake源碼,可以輕松在win、ubantu等平臺部署、編譯,win通常用VS編譯器,為了便于使用、閱讀,需要將CMake編譯成VS工程。 1、準備三個工具:CMake、VS、QT 為了在Windows上編譯RL和依賴項,您需要安裝一個編譯器(例如。,Visual Studio 2017)和跨平臺構…

如何在LabVIEW中更好地使用ActiveX控件?

在LabVIEW中&#xff0c;ActiveX控件可以幫助實現與其他應用程序或第三方組件的集成&#xff08;例如Microsoft Excel、Word、Internet Explorer等&#xff09;。以下是一些建議&#xff0c;幫助您更好地在LabVIEW中使用ActiveX控件&#xff1a; ? 1. 理解ActiveX控件的基本原…

如何使用Python從SACS結構數據文件中提取節點數據信息并導出到EXCEL

在現代工程設計中&#xff0c;結構分析和數據處理是不可或缺的一部分。特別是在海洋工程、橋梁建設等領域&#xff0c;SACS文件被廣泛應用。這種文件格式包含了結構模型的各種重要信息&#xff0c;包括節點&#xff08;JOINT&#xff09;、構件&#xff08;ELEMENT&#xff09;…