最近开始频繁尝试着如火如荼的Vue3,于是开始对之前随手写的Ant Design后台下手了,准备使用Vue3 + Element Plus 重构一波,但是之前用来写博客文章的MD编辑器还不适配Vue3,于是只好赶紧找了一个替代工具,用了一下感觉还不错,非常适合个人快速开发属于自己的编辑器。
快速开始
1 2 3 4 5
| # 使用 npm npm i @kangc/v-md-editor@next -S
# 使用 yarn yarn add @kangc/v-md-editor@next
|
引入配置
在入口文件处配置 (如 main.ts )
1 2
| import VMdEditor from '@kangc/v-md-editor' import githubTheme from '@kangc/v-md-editor/lib/theme/github.js'
|
引入代码高亮:
1 2 3 4 5 6 7 8
| import hljs from 'highlight.js/lib/core' import json from 'highlight.js/lib/languages/json' import javascript from 'highlight.js/lib/languages/javascript' import typescript from 'highlight.js/lib/languages/typescript' hljs.registerLanguage('json', json) hljs.registerLanguage('javascript', javascript) hljs.registerLanguage('typescript', typescript)
|
highlightjs 全部代码高亮支持文档 -> Github
1 2 3 4 5 6
| VMdEditor.use(githubTheme, { Hljs: hljs, }) app..... .use(VMdEditor) // 富文本编辑器 .mount('#app')
|
在需要使用插件的页面文件中引入样式文件 (如果多处使用也可以在 main.ts 直接引入)
1 2
| import '@kangc/v-md-editor/lib/style/base-editor.css' import '@kangc/v-md-editor/lib/theme/style/github.css'
|
图片上传
默认不带图片上传的功能,写入一个参数及回调即可开启:
1
| <v-md-editor ...... :disabled-menus="[]" @upload-image="handleUploadImage" />
|
在回调函数中即可拿到上传图片的File文件,截图粘贴也是可以触发回调的:
1 2 3 4 5 6 7 8
| const handleUploadImage = (event: any, insertImage: any, files: File) => { Notification.success('图片上传成功') insertImage({ url: '', }) }
|
自动保存
自动保存的实现是利用定时器,做一个节流调取保存方法。
有两种实现方式:
1. watch
1 2 3 4 5 6 7 8 9 10 11 12
| watch: { content (val) { if (this.updateTimer) { clearTimeout(this.updateTimer) } this.updateTimer = setTimeout(() => { this.save() this.updateTimer = null }, 10000) } }
|
2. md插件自带的回调
1
| <v-md-editor ..... @change="textChange" />
|
1 2 3 4 5 6 7 8 9 10 11
| let updateTimer: any = undefined const textChange = () => { if (updateTimer) { clearTimeout(updateTimer) } updateTimer = setTimeout(() => { save(true) updateTimer = undefined }, 10000) }
|
效果预览
vue2 旧版 |
vue3 重构 |
|
|