一个 Vue3 的基于 tiptap 和 Element Plus 的 「所见即所得」 富文本编辑器
易上手,对开发者友好,可扩展性强,设计简洁
支持 Vue3,基于 tiptap2 和 Element Plus,查看详情
English | 简体中文
👉https://leecason.github.io/element-tiptap
- 🎨 使用 element-plus 组件
- 💅 许多开箱即用的 extension (欢迎提交 issue 为新的 feature 留下建议 👏)
- 🔖 支持 markdown 语法
- 📘TypeScript 支持
- 🌐 支持 i18n(
en,zh,pl,ru,de,ko,es,zh_tw,fr,pt_br,nl,he). 欢迎贡献更多的语言 - 🎈 可用的
events:create,transaction,focus,blur,destroy - 🍀 高度自定义, 你可以自定义 extension 和它对应的菜单按钮视图
- 💻 也可以通过直接控制编辑器的行为来定制编辑器。
yarn add element-tiptap或者
npm install --save element-tiptapimport { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
import ElementTiptapPlugin from 'element-tiptap';
// import element-tiptap 样式
import 'element-tiptap/lib/style.css';
// 安装 ElementUI 插件
app.use(ElementPlus);
// 安装 element-tiptap 插件
app.use(ElementTiptapPlugin);
// 现在你已经在全局注册了 `el-tiptap` 组件。
app.mount('#app');或者
<template>
<el-tiptap ...><el-tiptap>
</template>
<script setup>
import { ElementTiptap } from 'element-tiptap';
</script><template>
<el-tiptap v-model:content="content" :extensions="extensions" />
</template>
<script setup>
import { ref } from 'vue';
import {
// 需要的 extensions
Doc,
Text,
Paragraph,
Heading,
Bold,
Underline,
Italic,
Strike,
BulletList,
OrderedList,
} from 'element-tiptap';
// 编辑器的 extensions
// 它们将会按照你声明的顺序被添加到菜单栏和气泡菜单中
const extensions = [
Doc,
Text,
Paragraph,
Heading.configure({ level: 5 }),
Bold.configure({ bubble: true }), // 在气泡菜单中渲染菜单按钮
Underline.configure({ bubble: true, menubar: false }), // 在气泡菜单而不在菜单栏中渲染菜单按钮
Italic,
Strike,
BulletList,
OrderedList,
];
// 编辑器的内容
const content = ref(`
<h1>Heading</h1>
<p>This Editor is awesome!</p>
`);
</script>类型: Array
你可以只使用需要的 extension,对应的菜单按钮将会按照你声明的顺序被添加。
所有可用的 extensions:
DocTextParagraphHeadingBoldItalicStrikeUnderlineLinkImageIframeCodeBlockBlockquoteBulletListOrderedListTaskListTextAlignIndentLineHeightHorizontalRuleHardBreakHistoryTableFormatClearColorHighlightPrintFullscreenSelectAllFontFamilyFontSizeCodeView
查看所有 extensions 的文档
你可以自定义 extension. 查看 Custom extensions.
类型: string
默认值: ''
当编辑器没有内容的时候,将会显示 placeholder。
<el-tiptap placeholder="Write something …" />类型: string
默认值: ''
编辑器的内容
<el-tiptap :content="content" @onUpdate="onEditorUpdate" />或者使用 'v-model'
<el-tiptap v-model:content="content" />类型: string
默认值: 'html'
可被定义为 'html'(默认) 或者 'json'.
<el-tiptap output="json" />进一步了解: prosemirror 数据结构
类型: boolean
默认值: false
<el-tiptap readonly />当 readonly 为 true, 编辑器不可编辑。
类型: boolean
默认值: 插件 spellcheck 配置项的值
<el-tiptap spellcheck> </el-tiptap>编辑器内容是否开启拼写检查。
类型: string | number
带单位的字符串值,无单位的值会将 px 作为单位:
<el-tiptap :width="700" height="100%"> </el-tiptap>上例会被转换为:
width: 700px;
height: 100%;类型: boolean
默认值: true
是否显示 menubar
类型: boolean
默认值: true
是否显示字数统计
类型: boolean
默认值: true
鼠标移到按钮上时是否显示 tooltip
指定编辑器国际化语言
<template>
<el-tiptap :locale="zh"></el-tiptap>
</template>
<script setup>
import { ElementTiptap } from 'element-tiptap';
import zh from 'element-tiptap/lib/locales/zh';
</script>可用的语言:
en(默认)zhplby @FurtakMruby @baitkuldeby @Thesicstarkoby @Hotbrainsesby @koaszh_twby @eric0324frby @LPABelgiumpt_brby @valterleonardonlby @Arne-Janheby @shovalPMS
欢迎贡献更多的语言.
<template>
<el-tiptap @onCreate="onCreate" />
</template>
<script setup>
/**
* tiptap editor 实例
* 阅读 https://tiptap.scrumpy.io/docs/guide/editor.html
*/
const onCreate = ({ editor }) => {
// ...
};
</script>用法与 init 相同
详细信息见 CONTRIBUTING
看到这么多人喜欢这个项目我非常开心,有了你们的支持我会做的更好。


