v-md-editor简单使用
v-md-editor 是基于 Vue 开发的 markdown 编辑器组件,点击查看官方文档
在Vue3中
安装
bash
# 使用 npm
npm i @kangc/v-md-editor@next -S
# 使用 yarn
yarn add @kangc/v-md-editor@next配置
创建plugins/index.ts文件
typescript
import { App } from 'vue'
import VMarkDownEditor from './MarkDownEditor' //引入组件包
const pluginList = [
VMarkDownEditor,//导入组件包
]
const plugins = {
install (app: App<Element>) {
// 批量注册插件 改用自动引入
Object.entries(pluginList).forEach(([, v]) => {
app.use(v)
})
}
}
export default plugins创建plugins/MarkDownEditor.ts文件
typescript
//编辑组件
import VMdEditor from '@kangc/v-md-editor/lib/codemirror-editor';
import '@kangc/v-md-editor/lib/style/codemirror-editor.css';
//主题
import githubTheme from '@kangc/v-md-editor/lib/theme/github.js';
import '@kangc/v-md-editor/lib/theme/style/github.css';
// highlightjs
import hljs from 'highlight.js';
// codemirror 编辑器的相关资源
import Codemirror from 'codemirror';
// mode
import 'codemirror/mode/markdown/markdown';
import 'codemirror/mode/javascript/javascript';
import 'codemirror/mode/css/css';
import 'codemirror/mode/htmlmixed/htmlmixed';
import 'codemirror/mode/vue/vue';
// edit
import 'codemirror/addon/edit/closebrackets';
import 'codemirror/addon/edit/closetag';
import 'codemirror/addon/edit/matchbrackets';
// placeholder
import 'codemirror/addon/display/placeholder';
// active-line
import 'codemirror/addon/selection/active-line';
// scrollbar
import 'codemirror/addon/scroll/simplescrollbars';
import 'codemirror/addon/scroll/simplescrollbars.css';
// style
import 'codemirror/lib/codemirror.css';
VMdEditor.Codemirror = Codemirror;
VMdEditor.use(githubTheme,{
Hljs: hljs,
})
export default VMdEditormain.ts文件导入
typescript
import { createApp,defineAsyncComponent } from "vue";
import App from "./App.vue";
import router from "./router/index";
//引入组件
import plugins from './plugins';
const app = createApp(App);
app.use(router).use(plugins).mount("#app");使用
vue
<script setup lang="ts">
//左侧工具栏
const leftBar = ref('undo redo clear h bold italic strikethrough quote ul ol table hr link image code');
//右侧工具栏
const rightBar = ref('preview sync-scroll fullscreen');
//Alt + a 实现上传图片
const handleUploadImage = async (event, insertImage, files) => {
// 拿到 files 之后上传到文件服务器,然后向编辑框中插入对应的内容
const formData = new FormData();
formData.append('file', files[0]);
//你自己的上传文件接口
let res = await FileApi.commonUpload('N', formData);
insertImage({
//state.filePreviewUrl 是我本地的预览接口 你可以换成自己的也可以用上传接口给你反的url
url: state.filePreviewUrl + res.data.fileId,
desc: res.data.fileOriginName
});
};
</script>
<template>
<v-md-editor
v-model="form.artContent" //绑定的值
:autofocus="true" //自动选中
height="400px" //高(必须)
width="100%" //宽
ref="editor"
:left-toolbar="leftBar" //左侧工具
:right-toolbar="rightBar" //右侧工具
:disabled-menus="[]" //禁用菜单
@upload-image="handleUploadImage" //上传图片的事件
></v-md-editor>
</template>