wangeditor富文本编辑器的使用(vue)-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

官网
官方demo
参考

安装
yarn add @wangeditor/editor
yarn add @wangeditor/editor-for-vue

封装的富文本组件

<template>
  <div style="border: 1px solid #ccc">
    <Toolbar
      style="border-bottom: 1px solid #ccc"
      :editor="editorRef"
      :defaultConfig="toolbarConfig"
      :mode="mode"
    />
    <Editor
      style="height: 40vh; overflow-y: hidden"
      v-model="valueHtml"
      :defaultConfig="editorConfig"
      :mode="mode"
      @onCreated="handleCreated"
    />
  </div>
</template>
<script>
import "@wangeditor/editor/dist/css/style.css"; // 引入 css

import {
  onBeforeUnmount,
  watch,
  defineEmits,
  ref,
  shallowRef,
  onMounted,
} from "vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import { message } from "ant-design-vue";
import netUrl from "@/views/miniprogram/uploadApi.js";
const token = ''
export default {
  components: { Editor, Toolbar },
  setup(props, { emit }) {
    // const emits = defineEmits(["onChange"]);
    // 编辑器实例必须用 shallowRef
    const editorRef = shallowRef();

    // 内容 HTML
    const valueHtml = ref("");
    watch(
      () => valueHtml,
      (n) => {
        emit("onChangeValueHtml", n.value);
      },
      { deep: true, immediate: true }
    );

    // 模拟 ajax 异步获取内容
    onMounted(() => {
      // setTimeout(() => {
      //   valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
      // }, 1500);
    });

    const toolbarConfig = {
      excludeKeys: [
        "fullScreen",
        "readOnly",
        "emotion",
        "code",
        "group-video",
        "undo", // 撤销
        "redo", // 重复
        "insertTable",
        "codeBlock",
      ],
    };
    const editorConfig = {
      placeholder: "请在这里输入内容...",
      MENU_CONF: {
        // 配置上传图片
        uploadImage: {
          // 请求路径
          server: `${netUrl}`,
          headers: { Authorization: token },
          // 后端接收的文件名称
          fieldName: "file",
          maxFileSize: 1 * 1024 * 1024, // 1M
          // 上传的图片类型
          allowedFileTypes: ["image/*"],
          // 小于该值就插入 base64 格式而不上传默认为 0
          base64LimitSize: 10 * 1024, // 10MB
          // 自定义插入返回格式【后端返回的格式】
          customInsert(res, insertFn) {
            if (res.code != 20000) {
              message.error("上传文件失败" + res.message);
              return;
            }
            insertFn(res.data, res.data, res.data);
          },
          // 携带的数据
          meta: {
            imageSource: 1,
          },
          // 将 meta 拼接到 url 参数中默认 false
          // 单个文件上传成功之后
          onSuccess(file, res) {
            if (res.code == 20000) {
              message.success(`${file.name} 上传成功`);
              return;
            } else {
              message.warning(`${file.name} 上传出了点异常`);
              return;
            }
          },
          // 单个文件上传失败
          onFailed(file, res) {
            console.log(res);
            message.error(`${file.name} 上传失败`);
          },
          // 上传错误或者触发 timeout 超时
          onError(file, err, res) {
            console.log(err, res);
            message.error(`${file.name} 上传出错`);
          },
        },
      },
    };

    // 组件销毁时也及时销毁编辑器
    onBeforeUnmount(() => {
      const editor = editorRef.value;
      if (editor == null) return;
      editor.destroy();
    });

    const handleCreated = (editor) => {
      editorRef.value = editor; // 记录 editor 实例重要
      // console.log(editor.getConfig(), "editor.getAllMenuKeys()");
    };

    return {
      editorRef,
      valueHtml,
      mode: "default", // 或 'simple'
      toolbarConfig,
      editorConfig,
      handleCreated,
    };
  },
};
</script>    

工具栏修改

可以在官网提供的页面查看工具栏配置

更多配置详解

toolbar.getConfig()

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: vue