npm i @vueuse/core
vite.config.js 配置
plugins: [ vue(), UnoCSS({}), AutoImport({ // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等 imports: ["vue", "@vueuse/core"], eslintrc: { enabled: false, filepath: "./.eslintrc-auto-import.json", globalsPropValue: true, }, resolvers: [ // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式) ElementPlusResolver(), IconsResolver({}), ], vueTemplate: true, // 配置文件生成位置(false:关闭自动生成) dts: false, // dts: "src/types/auto-imports.d.ts", }), Components({ resolvers: [ // 自动导入 Element Plus 组件 ElementPlusResolver(), // 自动导入图标组件 IconsResolver({ // @iconify-json/ep 是 Element Plus 的图标库 enabledCollections: ["ep"], }), ], // 指定自定义组件位置(默认:src/components) dirs: ["src/**/components"], // 配置文件位置(false:关闭自动生成) dts: false, // dts: "src/types/components.d.ts", }), Icons({ // 自动安装图标库 autoInstall: true, }), createSvgIconsPlugin({ // 指定需要缓存的图标文件夹 iconDirs: [path.resolve(pathSrc, "assets/icons")], // 指定symbolId格式 symbolId: "icon-[dir]-[name]", }), // https://github.com/anncwb/vite-plugin-mock/issues/9 viteMockServe({ ignore: /^\_/, mockPath: "mock", enable: mode === "development", }), ],
1. wangEditor 组件
<template> <div class="editor-wrapper"> <Toolbar id="toolbar-container" :editor="editorRef" :default-config="toolbarConfig" :mode="mode" /> <Editor id="editor-container" v-model="modelValue" :default-config="editorConfig" :mode="mode" @on-change="handleChange" @on-created="handleCreated" /> </div></template><script setup lang="ts">import { Editor, Toolbar } from "@wangeditor/editor-for-vue";</script><style src="@wangeditor/editor/dist/css/style.css"></style>
使用组件
<script setup lang="ts">import Editor from "@/components/WangEditor/index.vue";const value = ref("初始内容");</script><template> <div class="app-container"> <editor v-model="value" style="height: calc(100vh - 180px)" /> </div></template>
2. 全屏 , 浏览器宽度, 响应式数据
/** * vueUse 全屏 */
const { isFullscreen, toggle } = useFullscreen()
import { useWindowSize } from "@vueuse/core"
const { width } = useWindowSize()
<Editor
id="editor-container"
v-model="modelValue"
:default-config="editorConfig"
:mode="mode"
@on-change="handleChange"
@on-created="handleCreated"
/>
const props = defineProps({
modelValue: {
type: [String],
default: "",
},
})
const emit = defineEmits(["update:modelValue"])
// useVModel返回的数据就是响应式数据
const modelValue = useVModel(props, "modelValue", emit)