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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 此夏_唯美

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