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

推荐订阅源

D
DataBreaches.Net
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
博客园 - 聂微东
罗磊的独立博客
W
WeLiveSecurity
博客园_首页
Scott Helme
Scott Helme
V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
Latest news
Latest news
L
Lohrmann on Cybersecurity
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
About on SuperTechFans
F
Full Disclosure
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 司徒正美
博客园 - Franky
C
CXSECURITY Database RSS Feed - CXSecurity.com
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
雷峰网
雷峰网
博客园 - 【当耐特】
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
T
Tor Project blog
V
V2EX
爱范儿
爱范儿
C
Check Point Blog
T
Threatpost
Project Zero
Project Zero
量子位
V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
I
Intezer
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
GbyAI
GbyAI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 此夏_唯美

新概念英语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",
    },
  });
};