vue3中使用editor.js

第一步安装依赖

npm i @editorjs/editorjs --save

第二步创建editor.vue插件

<template><div><div id="editorjs" :style="'width:' + props.width + 'px;height:' + props.height + 'px;'"></div></div>
</template>
<script setup>
// 标题(Header):用于设置文本的标题级别,支持多级标题。
// 段落(Paragraph):用于添加普通文本段落。
// 引用(Quote):用于添加引用文本块。
// 列表(List):支持有序列表和无序列表。
// 图像(Image):可以插入图片,并指定图片的来源、标题和描述等属性。
// 插入链接(Link):可以插入超链接,指定链接的URL、标题和打开方式等。
// 视频(Embed):可以插入媒体内容的外部嵌入代码或链接。
// 表格(Table):可以创建简单的表格,指定表格行数和列数。
// 代码(Code):用于插入代码块,支持多种编程语言的语法高亮。
// 内容警告(Warning):用于突出显示重要提示或警告。
// 勾选框(Checklist):用于创建待办事项列表,可以勾选完成状态。
// 分割线(Delimiter):用于在内容中插入水平分割线。
import EditorJS from '@editorjs/editorjs';
import Header from '@editorjs/header';
import List from '@editorjs/list';
import Paragraph from '@editorjs/paragraph';
import Quote from '@editorjs/quote';
import Image from '@editorjs/image';
import Embed from '@editorjs/embed';
import Table from '@editorjs/table';
import Code from '@editorjs/code';
import Delimiter from '@editorjs/delimiter';import zh from './i18n.json'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const store = useStore()
const { ctx, proxy } = getCurrentInstance()
const emit = defineEmits(['update:modelValue'])
const props = defineProps({modelValue: {type: String,default: "",},width: {type: Number,default: 500,},height: {type: Number,default: 500,},
})
const editor = ref(null)const saveEditor = () => {editor.value.save().then((outputData) => {console.log(outputData)}).catch((error) => {console.log(error)});
}
const { data } = toRefs(reactive({//定义数组和对象data: ''
}))
onMounted(() => {editor.value = new EditorJS({holder: 'editorjs',//应该包含编辑器的元素Id// autofocus: true,//自动获取焦点placeholder: '请输入内容',i18n: {messages: zh},logLevel: 'VERBOSE',//日志级别   VERBOSE显示所有消息(默认) INFO显示信息和调试消息 WARN只显示警告消息 ERROR只显示错误信息readOnly: false,//只读模式tools: {//工具列表header: {class: Header,inlineToolbar: ['link']},list: {class: List,inlineToolbar: true},paragraph: {class: Paragraph,inlineToolbar: true},quote: {class: Quote,inlineToolbar: true},// image: SimpleImage,image: {class: Image,inlineToolbar: true},embed: {class: Embed,inlineToolbar: true},table: {class: Table,inlineToolbar: true},code: {class: Code,inlineToolbar: true},delimiter: {class: Delimiter,inlineToolbar: true},},onReady: () => {console.log('Editor.js is ready to work!')},})console.log(editor.value);
})
// watch(propData,(newVal,oldVal)=>{})
defineExpose({ saveEditor })
</script><style scoped></style>

创建i18n翻译文件   i18n.json

{"ui": {"blockTunes": {"toggler": {"Click to tune": "点击调整","or drag to move": "或者拖动移动"}},"inlineToolbar": {"converter": {"Convert to": "转换为"}},"toolbar": {"toolbox": {"Add": "添加"}}},"toolNames": {"Text": "文本","Heading": "标题","List": "列表","Warning": "警告","Checklist": "清单","Quote": "引用","Code": "代码","Delimiter": "分隔符","Raw HTML": "原始HTML","Table": "表格","Link": "链接","Marker": "标记","Bold": "加粗","Italic": "斜体","Image": "图片"},"tools": {"warning": {"Title": "标题","Message": "消息"},"link": {"Add a link": "添加链接"},"stub": {"The block can not be displayed correctly.": "该块不能正确显示"}},"blockTunes": {"delete": {"Delete": "删除"},"moveUp": {"Move up": "向上移动"},"moveDown": {"Move down": "向下移动"}}
}

在页面引入组件

<template><div class="editorBox"><editorJs ref="editorRef" :width="700" :height="1000" v-model="data"></editorJs><el-button @click="save">保存</el-button></div>
</template>
<script setup>
import editorJs from '@/components/Editor/editorJs'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const store = useStore()
const { ctx, proxy } = getCurrentInstance()
const emit = defineEmits(['update:modelValue'])
const props = defineProps({propData: {type: String,default: '',},
})
const { data } = toRefs(reactive({//定义数组和对象data: ''
}))
const editorRef = ref(null)//定义普通类型
function save() {editorRef.value.saveEditor()
}// onMounted(() => {})
// watch(propData,(newVal,oldVal)=>{})
</script><style scoped>
.editorBox {padding: 40px;width: 700px;background-color: #fff;margin: 50px auto auto;box-shadow: 0 1px 4px rgba(0, 0, 0, .04), 0 4px 10px rgba(0, 0, 0, .08);
}
</style>

这只是一个简单的示例,具体配置请去官网Editor.js (editorjs.io)

 Editor.js 在其核心设计中不直接包含一个传统的“顶部工具栏”。它的设计理念是简洁、无干扰的用户体验,焦点是在“块”内容上,而非传统的富文本编辑器的样式。因此,Editor.js 的默认设置下,不会显示类似 Word 或其他传统编辑器的顶部工具栏。

说一下我的心得:官方文档对中文及其不友好,不建议使用这个编辑器,除非你有大量时间来开发研究

Editor.js 是一个用于构建具有完全可定制化块结构的现代编辑器的开源库。它提供了一个简洁、可扩展和易于使用的接口,使开发人员能够创建拥有丰富内容和互动性的编辑器。

以下是一些 Editor.js 的特点和优势:

  1. 块结构:Editor.js 采用了块结构的概念,将内容分解为可独立操作和样式化的不同块,如段落、标题、图像、列表等。这种结构使得对内容的编辑和扩展变得更加直观和灵活。

  2. 嵌套块:不仅可以创建单一块的内容,还可以在块内部创建嵌套结构,构建复杂的内容组合。例如,你可以在段落块中嵌套标题、列表或引用块等。

  3. 简洁的用户界面:Editor.js 的用户界面被设计成简洁、直观且易于使用。用户可以通过简单的操作来创建、编辑和删除块,不需要关注复杂的标记语法或样式细节。

  4. 开放的插件系统:Editor.js 提供了一个强大的插件系统,允许开发人员创建自定义块类型和扩展编辑器功能。你可以根据需要编写自己的块插件,并将其集成到编辑器中,以满足特定的编辑需求。

  5. 丰富的内容保存:Editor.js 使用 JSON 格式保存编辑器的内容。这种格式简单易懂,便于存储和传输,同时保留了块结构和样式的信息。你可以将编辑器的内容保存到数据库中,然后在需要时重新加载。

  6. 可扩展的主题和样式:Editor.js 的外观和样式可以根据你的品牌和设计需求进行定制。你可以创建自己的主题或使用现有的主题来改变编辑器的外观。

  7. 多语言支持:Editor.js 支持多种语言,可以轻松地切换编辑器的显示语言或自定义特定术语的翻译。

总而言之,Editor.js 是一个功能强大、灵活且易于使用的编辑器库,适用于构建各种应用程序中的富文本编辑功能,如内容管理系统、博客平台、电子商务平台等。它提供了现代化的编辑体验,同时让开发人员能够自由定制编辑器以满足个性化需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WKB近似

WKB方法用于研究一种特定类型的微分方程的全局性质 很有用这种特定的微分方程形如&#xff1a; 经过一些不是特别复杂的推导&#xff0c;我们可以得到他的WKB近似解。 该近似解的选择取决于函数和参数的性质同时&#xff0c;我们默认函数的定义域为当恒大于零,时&#xff1a; 当…

44.java教程

目录 一、Java 教程。 &#xff08;1&#xff09;我的第一个 JAVA 程序。 &#xff08;2&#xff09;Java 简介。 &#xff08;2.1&#xff09;java简介。 &#xff08;2.2&#xff09;主要特性。 &#xff08;2.3&#xff09;发展历史。 &#xff08;2.4&#xff09;J…

iOS应用程序的签名、重签名和安装测试

目录 前言 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 前言 ipa编译出来后&#xff0c;或者ipa进行修改后&#xff0c;需要进行重新签名才能安装到测试手机&#xff0c;或者提交app store供apple 商店审核上架。ipaguard有签名和重签名功能&…

吴恩达ChatGPT《Finetuning Large Language Models》笔记

课程地址&#xff1a;https://learn.deeplearning.ai/finetuning-large-language-models/lesson/1/introduction Introduction 动机&#xff1a;虽然编写提示词&#xff08;Prompt&#xff09;可以让LLM按照指示执行任务&#xff0c;比如提取文本中的关键词&#xff0c;或者对…

React中setState的原理及深层理解

1.为什么使用setState React并没有实现类似于Vue2中的Object.defineProperty或者Vue3中的Proxy的方式来监听数据的变化 我们必须通过setState来告知React数据已经发生了变化 setState方法是从Component中继承过来的。 2.setState异步更新 setState设计为异步&#xff0c;可…

PHY6230低成本遥控灯控芯片国产蓝牙BLE5.2 2.4G SoC

高性价比的低功耗高性能蓝牙5.2系统级芯片&#xff0c;适用多种PC/手机外设连接场景。 高性能多模射频收发机&#xff1a; 通过硬件模块的充分复用实现高性能多模数字收发机。发射机&#xff0c;最大发射功率10dBm&#xff1b;BLE 1Mbps速率接收机灵敏度达到-96dBm&#xff1…

解决Vue设置图片的动态src不生效的问题

一、问题描述 在vue项目中&#xff0c;想要动态设置img的src时&#xff0c;此时发现图片会加载失败。在Vue代码中是这样写的&#xff1a; 在Vue的data中是这样写的&#xff1a; 我的图片在根目录下的static里面&#xff1a; 但是在页面上这个图片却无法加载出来。 二、解决方案…

五、核支持向量机算法(NuSVC,Nu-Support Vector Classification)(有监督学习)

和支持向量分类(Nu-Support Vector Classification)&#xff0c;与 SVC 类似&#xff0c;但使用一个参数来控制支持向量的数量&#xff0c;其实现基于libsvm 一、算法思路 本质都是SVM中的一种优化&#xff0c;原理都类似&#xff0c;详细算法思路可以参考博文&#xff1a;三…

10分钟让你拿下Linux常用命令,网安运维测试人员必掌握!

文章目录 一、目录操作 1、批量操作 二、文件操作三、文件内容操作&#xff08;查看日志&#xff0c;更改配置文件&#xff09; 1、grep(检索文件内容)2、awk(数据统计)3、sed(替换文件内容)4、管道操作符|5、cut(数据裁剪) 四、系统日志位置五、创建与删除软连接六、压缩和解压…

虹科案例 | ELPRO帮助客户实现符合GDP标准的温度监测和高效的温度数据管理

文章来源&#xff1a;虹科环境监测技术 点击阅读原文&#xff1a;https://mp.weixin.qq.com/s/wwIPx_GK3ywqWr5BABC4KQ 在本案例研究中&#xff0c;虹科ELPRO帮助客户 ● 实施了温度监测解决方案&#xff0c;以一致的数据结构获取各国和各种运输方式的数据; ● 通过将温度数据上…

https跳过SSL认证时是不是就是不加密的,相当于http?

https跳过SSL认证时是不是就是不加密的,相当于http?&#xff0c;其实不是&#xff0c;HTTPS跳过SSL认证并不相当于HTTP&#xff0c;也不意味着没有加密。请注意以下几点&#xff1a; HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;本质上是在HTTP的基础上…

【postgresql】ERROR: column “xxxx.id“ must appear in the GROUP BY

org.postgresql.util.PSQLException: ERROR: column "xxx.id" must appear in the GROUP BY clause or be used in an aggregate function 错误&#xff1a;列“XXXX.id”必须出现在GROUP BY子句中或在聚合函数中使用 在mysql中是正常使用的&#xff0c;在postgre…

数字IC笔试千题解--单选题篇(二)

前言 出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。 所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料…

概率论的相关知识

理解随机变量 X X X和 x x x的区别&#xff0c; F X ( x ) F_X(x) FX​(x)、 f X ( x ) f_X(x) fX​(x) X X X代表的是随机变量&#xff0c; x x x是样本值&#xff0c;是 X X X的具体取值&#xff0c;分布函数 F X ( x ) F_X(x) FX​(x)和概率密度 f X ( x ) f_X(x) fX​(x)中…

投资理财知识分享:100个金融知识专业术语

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家分享一下投资理财知识方面100个金融知识专业术语&#xff0c;希望能帮助大家了解更多金融知识。 1. 股票&#xff1a;代表对一家公司所有权的证券。 2. 债券&#xff1a;公司或政府发行的借款证券。 3. 投资组合&#xff…

00-MySQL数据库的使用-上

一 数据库基础知识 先谈发音 MySQL如何发音&#xff1f;在国内MySQL发音有很多种&#xff0c;Oracle官方文档说 他们念作 My sequal[si:kwəl]。 数据库基本概念 数据 数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;这 些符号是可识别…

数学建模之遗传算法

文章目录 前言遗传算法算法思想生物的表示初始种群的生成下一代种群的产生适应度函数轮盘赌交配变异混合产生新种群 停止迭代的条件遗传算法在01背包中的应用01背包问题介绍01背包的其它解法01背包的遗传算法解法生物的表示初始种群的生成下一代种群的产生适应度函数轮盘赌交配…

数据结构之【动态数组】

1. 线性表 概念&#xff1a;线性表是n个具有相同特性的数据元素的有限序列。 常见的线性表有&#xff1a;数组、链表、栈、队列、字符串…… 特点&#xff1a; 保存在这个结构中的元素都是相同的数据类型。元素之间线性排列&#xff0c;元素之间在逻辑上是连续的。 线性表…

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09; 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09;分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLA…

loadEnv是vite的工具函数

loadEnv()函数返回一个对象&#xff0c;这个对象就是根据开发模式还是生产环境加载的.env.development文件里的环境变量&#xff0c;有系统自带的也有自己手写的 loadEnv(第1个参数&#xff0c;第2个参数&#xff0c;第3个参数) 注意&#xff1a;第3个参数如果是“”空字符…