包装project项目 wangEditor富文本编辑器示例

189 阅读1分钟
<!-- wangEditor富文本编辑器示例 --><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>

"@wangeditor/editor": "^5.1.23",

"@wangeditor/editor-for-vue": "5.1.10",

<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";// API 引用import { uploadFileApi } from "@/api/file";const props = defineProps({  modelValue: {    type: [String],    default: "",  },});const emit = defineEmits(["update:modelValue"]);const modelValue = useVModel(props, "modelValue", emit);const editorRef = shallowRef(); // 编辑器实例,必须用 shallowRefconst mode = ref("default"); // 编辑器模式const toolbarConfig = ref({}); // 工具条配置// 编辑器配置const editorConfig = ref({  placeholder: "请输入内容...",  MENU_CONF: {    uploadImage: {      // 自定义图片上传      async customUpload(file: any, insertFn: any) {        uploadFileApi(file).then((response) => {          const url = response.data.url;          insertFn(url);        });      },    },  },});const handleCreated = (editor: any) => {  editorRef.value = editor; // 记录 editor 实例,重要!};function handleChange(editor: any) {  modelValue.value = editor.getHtml();}// 组件销毁时,也及时销毁编辑器onBeforeUnmount(() => {  const editor = editorRef.value;  if (editor == null) return;  editor.destroy();});</script><style src="@wangeditor/editor/dist/css/style.css"></style>