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

推荐订阅源

T
Tailwind CSS Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
The Cloudflare Blog
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
WordPress大学
WordPress大学
Jina AI
Jina AI
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
有赞技术团队
有赞技术团队
V
Vulnerabilities – Threatpost
博客园 - 司徒正美
L
Lohrmann on Cybersecurity
P
Privacy International News Feed
S
SegmentFault 最新的问题
C
Cisco Blogs
V
V2EX
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
I
Intezer
人人都是产品经理
人人都是产品经理
博客园_首页
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
Security Latest
Security Latest
V
Visual Studio Blog
S
Schneier on Security
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
腾讯CDC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - Franky
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
G
GRAHAM CLULEY
量子位
S
Securelist
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tenable Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
T
Troy Hunt's Blog

微风静语

用 codebase-memory-mcp 给 AI 编程加一层“代码记忆” EchoCraft - 专为独立开发者和小型团队打造的产品官网主题 Halo 站长必备:外链安全与流量分析神器——“链接工具箱”重磅升级! Halo插件开发:java17旧项目迁移至java21项目记录 Halo插件|一个面向创作者的多功能媒体处理工具集 分布式事务详解:从入门到精通 让你的网站初步适配PWA Halo主题 - 微浸:以轻量构建美学,用细节定义体验 深入理解Python爬虫技术:原理、实现与实践 Halo-2.20 新特性:自定义登录页面模版 vue3 中父子组件数据传输踩坑 将你的服务运维面板从宝塔替换为1panel Python实战项目:外星人入侵(源码分享) theme-hao主题适配友链自助提交插件 plugin-artalk 插件保姆级使用教程 plugin-blog-hao 插件部分功能演示 halo 插件开发踩坑记录(一) Thymeleaf 模版引擎语法浅记 信息洪流中的自我救赎 mac 系统里如何管理多个jdk版本 memso API 不完全指南 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法 halo-theme-hao主题:artalk评论区美化 衡量个人成长 halo-theme-hao 主题魔改教程 分享一个魔改的 Artalk 评论系统邮件模版 halo-theme-hao 主题标签记录 开发一个 Halo2.0 的安全条跳转中台插件! Mac 软件推荐:使用 Mac 一年半来,我一直在用的软件! TypeScript教程---面向对象编程 软件版本命名规范 TypeScript教程---基础语法及编译设置 2024年家乡春季的第一场大雪 提问的智慧 基础篇:容器化部署技术 -—docker,从此摆脱多环境配置的苦恼! 普通本科的四年大学教育,给我带来了什么? 因果与平衡 程序的本质:代码是如何被执行的 软件开发者应该具备的基本提问素质 如何编写 Restful 风格的接口 探索力 Springboot入门基础篇 springboot中如何使用注解来实现aop Springboot项目生成接口文档方法 Java 实体代码生成器 lombok 的使用 深入 Java 泛型 分布式版本控制工具 git 的基本使用 如何搭建前后端分离的项目 初识Vue3--令人焕然一新的使用逻辑和代码组织方式! 浅谈前端发展史 为什么要学习数据结构和算法
关于富文本编辑器 wangeditor 在 vue2 项目中的使用
webjing · 2022-02-19 · via 微风静语

一、介绍:

wangEditor —— 轻量级 web 富文本编辑器,配置方便,使用简单。官方使用文档

二、在 vue 项目里边的使用

1、安装

npm 安装 npm i wangeditor --save

2、引入你的 vue 项目

import wangEditor from "wangeditor";

3、在你的模板里边设置一个挂载的元素

<el-form-item label="博客内容">
    	<!-- 挂载的元素节点 -->
        <div ref="editorElem"></div>
        <!-- 内容预览区,可设可不设 -->
        <el-input
          type="textarea"
          cols="170"
          rows="20"
          v-model="ruleform.handbook"
        ></el-input>
</el-form-item>

3、在 vue 的生命周期函数 mounted 中创建 wangeditor 实例

  • data 中的数据
data(){
	retrun{
        ruleform: { 
            // 存储内容的区域
            handbook: "",
            editor:null,
      },
    }
}
mounted() {
    const editor = new wangEditor(this.$refs.editorElem);
    editor.config.height = 400;
    // z-index设置
    editor.config.zIndex = 1;
    // 挂载highlight插件,这个需要自己引入另外一个插件 highlight.js
    editor.highlight = hljs;
    // 粘贴文本时自动过滤图片
    editor.config.pasteIgnoreImg = true;
    // 限制上传图片的大小
    editor.config.uploadImgMaxSize = 2 * 1024 * 1024; // 2M
    editor.config.uploadImgMaxLength = 1; // 一次只能上传一个个图片
    // 网络图片的选项配置
    editor.config.showLinkImgAlt = false;
    // 配置超链接
    editor.config.showLinkImgHref = false;
    // 配置历史浏览记录
    editor.config.compatibleMode = function () {
      // 返回 true 表示使用兼容模式
      return true;
    };
    //插入代码语言配置
    editor.config.languageType = [
      "C",
      "C#",
      "C++",
      "CSS",
      "Java",
      "JavaScript",
      "JSON",
      "TypeScript",
      "Html",
      "XML",
      "SQL",
      "Markdown",
      "Python",
    ];
    //配置全屏功能是否显示
    editor.config.showFullScreen = true;
    // 配置图片上传接口
    editor.config.uploadImgTimeout = 20 * 1000;
    editor.config.uploadFileName = "file";
    // 上传图片的请求头
    editor.config.uploadImgHeaders = {
      Accept: "text/x-json",
      a: 100,
    };
    // 自己后端配置所需要的图片上传接口
    editor.config.uploadImgServer = "/node/adminUser/imgUploadM";
    editor.config.uploadImgHooks = {
      // 图片上传并返回了结果,图片插入已成功
      success: function (xhr) {
        this.$message.success("上传成功");
      },
      // 上传图片超时
      timeout: function (xhr) {
        this.$message.error("请求已超时");
      },
      // 图片上传并返回了结果,想要自己把图片插入到编辑器中
      customInsert: function (insertImgFn, result) {
        insertImgFn(result.data[0].url);
      },
    };
    // 配置 onchange 回调函数
    editor.config.onchange = (newHtml) => {
      const safeHtml = xss(newHtml);
      this.ruleform.handbook = safeHtml;
    };
    // 创建编辑器
    editor.create();
    this.editor = editor;
  },
  • 在离开该组件的时候可以销毁该实例
 beforeDestroy() {
    // 调用销毁 API 对当前编辑器实例进行销毁
    this.editor.destroy();
    this.editor = null;
  },

注意:如果需要设置代码高亮模式,需引入插件 highlight.js

  • 安装
npm install highlight.js --save
  • 引入
import hljs from "highlight.js";
// css的引入 自己在 higlight.js 官网中找一个自己喜欢的样式引入
import "highlight.js/styles/monokai-sublime.css";

三、关于文本内容的获取和预览绑定

1、文本内容获取

 // 配置 onchange 回调函数
    editor.config.onchange = (newHtml) => {
      const safeHtml = xss(newHtml);
      this.ruleform.handbook = safeHtml;
    };

注意:在这个回调函数中我为了防止 xss 攻击,引入了一个插件 xss 官网,使用也很简单,只需三步:

  • 安装
npm install xss
  • 引入
import xss from "xss";
  • 在需要过滤的html 中进行使用
const html = "<div>xss攻击<div>";
const sagfeHtml = xss(html);

2、关于文本内容的预览

使用 v-model 在文本域元素 text-area 里边进行双向绑定,上边的回调函数中已绑定,不做详细解释。

四、总结

关于 wangeditor 的使用,你只需要引入你的项目,然后设置一个挂载的元素,紧接着创建 一个 wangeditor 的实例就 ok 了。此为,你可以选择将 wangeditor 中编辑的内容存储到数据库中,然后在前端页面中渲染的时候使用 vue 中的 v-html 指令进行插入,但是要注意防御 xss 攻击。