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