惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
有赞技术团队
有赞技术团队
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
MyScale Blog
MyScale Blog
博客园_首页
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
罗磊的独立博客

博客园 - 此夏_唯美

新概念英语3单词表 git回滚代码 git常用命令大全 element动态表单验证一 vue+element+Cascader 级联选择器任意一级选项,去掉单选框radio vue3+vant4+vuex4入门案例 vue3+vant3封装省市区组件 前端工具vscode将英文设置中文简单方便 vue3打包后一片空白控制台报错 vue实现自定义字体库 element-ui跨行 Element-ui树形控件el-tree鼠标移入显示隐藏效果超简单 vue表格拖拽使用Sortable插件库 Vue+Element+Table表格动态跨列文章 vue框架文字滚动插件 vue项目浏览器ioc小图标 vue搭建项目iview+axios+less vue移动端在线签名 Vue中的input输入框无法输入强制渲染
vue+wangEditor编辑器,上传图片请求后台接口
此夏_唯美 · 2024-10-15 · via 博客园 - 此夏_唯美

来吧,先给大家看一下,是否是你想要的简单轻便编辑器的效果。

父组件:

<EditorView :content="value" @change="grtUrl"/>

<script>
import EditorView from "@/components/EditorView";
export default {
  components: {
    EditorView
      }
    },
  data() {
    return {
      value: ""  //传值给编辑器
    }
},
  methods: {
    grtUrl(val){
      this.value = val;
      }
    }
}
</script>
    

 子组件:

<template>
  <div>
    <div id="editor"></div>
  </div>
</template>

<script>
import E from "wangeditor";
import { uploadImg } from "@/utils/uploadImg";

export default {
  name: "WangEditor",
  data() {
    return {
      result: "",
      editor: null, // WangEditor 实例
    };
  },
  props: {
    content: {
      type: String,
      default: "",
    },
  },
  watch: {
    // 当父组件传入的 content 变化时,更新编辑器内容
    content(newContent) {
      if (this.editor && newContent !== this.editor.txt.html()) {
        this.editor.txt.html(newContent);
      }
    },
  },
  mounted() {
    this.editor = new E("#editor");
    // 配置 server 接口地址
    this.editor.config.showLinkImg = false; //即可隐藏插入网络图片的功能
    // 配置菜单
    this.editor.config.menus = [
      "head", // 标题
      "bold", // 粗体
      "fontSize", // 字号
      "fontName", // 字体
      "italic", // 斜体
      "underline", // 下划线
      "strikeThrough", // 删除线
      "foreColor", // 文字颜色
      "backColor", // 背景颜色
      "link", // 插入链接
      "list", // 列表
      "justify", // 对齐方式
      "quote", // 引用
      "emoticon", // 表情
      "image", // 插入图片
      "table", // 表格
      // 'video', // 插入视频
      // 'code', // 插入代码
      "undo", // 撤销
      "redo", // 重复
      "fullscreen", // 全屏
      "indent",
      "lineHeight",
      "todo",
      "splitLine",
    ];
    this.editor.config.customUploadImg = function (resultFiles, insertImgFn) {
      // resultFiles 是 input 中选中的文件列表
      // insertImgFn 是获取图片 url 后,插入到编辑器的方法
      const formData = new FormData();
      formData.append("file", resultFiles[0]);
      uploadImg(formData).then((res) => {
        insertImgFn(res.data.url); // 页面插入图片
      });
    };
    this.editor.config.onchange = (html) => {
      this.content = html; // 绑定当前逐渐地值
      this.$emit("change", this.content); // 将内容同步到父组件中
    };
    this.editor.create();
    // 初始化时设置内容
    this.editor.txt.html(this.content);
  },
  beforeDestroy() {
    // 销毁编辑器实例,释放资源
    if (this.editor) {
      this.editor.destroy();
    }
  },
};
</script>
<style scoped>
/* 遮罩层级太高 */
#editor >>> .w-e-toolbar{
  z-index: 2 !important;
}
#editor >>> .w-e-text-container{
  z-index: 1 !important;
}
</style>

 文件路径在src/utils/uploadImg下

import request from "./request";
// 图片上传
export const uploadImg = (formData) => {
  return request.post("/qiegang-system/api/v1/files", formData, {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });
};