wangeditor html编辑,Vue整合wangEditor富文本编辑器

最近在做项目时,客户有个发布新闻动态的功能,具体页面内容让客户自己编写,所以要选择富文本编辑器,这样用户体验好一点。网上有很多的富文本编辑器, 因为项目的功能并不是很复杂,所以选择了wangEditor,界面简洁,使用起来也挺方便的;

ba8abd50ab9d

image.png

实现思路

1.安装wangEditor

2.封装成组件

3.父组件中直接调用

一、wangEditor安装

这里使用npm命令安装;

npm install wangeditor

二、组件封装

2.1、创建组件

这里我们创建一个名为editor.vue的文件,并导入文件;

import E from "wangeditor"

2.2、初始化wangeditor

(1)我们创建一个初始化方法

(2)编写初始化代码

(3)在mounted()中调用

js代码

initE() {

this.editor = new E('#e')

//这里各位小伙伴可以查询官网,根据自己的需求进行菜单栏调整

this. editor.customConfig.menus = [

'head', // 标题

'bold', // 粗体

'fontSize', // 字号

'fontName', // 字体

'italic', // 斜体

'underline', // 下划线

'strikeThrough', // 删除线

'foreColor', // 文字颜色

'backColor', // 背景颜色

'link', // 插入链接

'list', // 列表

'justify', // 对齐方式

'quote', // 引用

'emoticon', // 表情

'image', // 插入图片

'table', // 表格

'code', // 插入代码

'undo', // 撤销

'redo' // 重复

]

this.editor.create()

},

mounted(){

this.initE()

}

2.3、配置图片上传

this.editor.customConfig.uploadFileName = 'file'

this.editor.customConfig.uploadImgServer = `url` // 你的服务器上传地址

this.editor.customConfig.uploadImgHooks = {

before: function (xhr, editor, files) {

// 图片上传之前触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件

// 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传

// return {

// prevent: true,

// msg: '放弃上传'

// }

},

success: function (xhr, editor, result) {

// 图片上传并返回结果,图片插入成功之后触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果

},

fail: function (xhr, editor, result) {

// 图片上传并返回结果,但图片插入错误时触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果

},

error: function (xhr, editor) {

// 图片上传出错时触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象

},

timeout: function (xhr, editor) {

// 图片上传超时时触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象

},

// 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置

// (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错)

customInsert: function (insertImg, result, editor) {

// 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)

// insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果

// 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:

console.log(result.url)

var url = result.url

insertImg(url)

// result 必须是一个 JSON 格式字符串!!!否则报错

}

}

该代码需放置在this.editor = new E('#e') 和 this.editor.create()之间;

2.4、接收wangeditor接收值

this.editor.customConfig.onchange = (html) => {

this.info_ = html // 绑定当前逐渐地值

this.$emit('change', this.info_) // 将内容同步到父组件中

}

2.5、接收父组件传递过来的值

这里我们可以使用props属性指定字段来接收值,并使用model指定字段和事件

model: {

prop: 'desc',

event:'change'

},

props:{

desc:{

type:String,

default:""

},

//业务中我们经常会有添加操作和编辑操作,添加操作时,我们需清除上一操作留下的缓存

isClear:{

type:Boolean,

default:false

}

},

2.6、将父组件传递过来的值传入wangeditor

这里我们需要使用watch来监听值的变化,并进行赋值操作

watch:{

//判断用户是否清除编辑器缓存

isClear(val){

// console.log(val)

if (val){

this.editor.txt.clear()

}

},

//接收父组件传递过来的值

desc(value) {

//console.log("desc",value)

//判断父组件传递过来的值跟当前编辑器内容是否一样

if (value != this.editor.txt.html()) {

this.editor.txt.html(this.desc)

}

}

},

2.7、子组件代码汇总

import Vue from 'vue'

import E from "wangeditor"

export default {

name: 'editor',

data(){

return{

content:"",

editor: null,

info_:null

}

},

model: {

prop: 'desc',

event:'change'

},

watch:{

isClear(val){

// console.log(val)

if (val){

this.editor.txt.clear()

// this.info_=null

}

},

desc(value) {

//console.log("desc",value)

if (value != this.editor.txt.html()) {

this.editor.txt.html(this.desc)

}

}

},

props:{

desc:{

type:String,

default:""

},

//业务中我们经常会有添加操作和编辑操作,添加操作时,我们需清除上一操作留下的缓存

isClear:{

type:Boolean,

default:false

}

},

methods:{

initE(){

this.editor = new E('#e')

this.editor.customConfig.onchangeTimeout = 1000 // 单位 ms

this.editor.customConfig.uploadFileName = 'file'

this.editor.customConfig.uploadImgServer = `url` // 你的服务器地址

this.editor.customConfig.uploadImgHooks = {

before: function (xhr, editor, files) {

// 图片上传之前触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件

// 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传

// return {

// prevent: true,

// msg: '放弃上传'

// }

},

success: function (xhr, editor, result) {

// 图片上传并返回结果,图片插入成功之后触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果

},

fail: function (xhr, editor, result) {

// 图片上传并返回结果,但图片插入错误时触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果

},

error: function (xhr, editor) {

// 图片上传出错时触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象

},

timeout: function (xhr, editor) {

// 图片上传超时时触发

// xhr 是 XMLHttpRequst 对象,editor 是编辑器对象

},

// 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置

// (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错)

customInsert: function (insertImg, result, editor) {

// 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)

// insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果

// 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:

console.log(result.url)

var url = result.url

insertImg(url)

// result 必须是一个 JSON 格式字符串!!!否则报错

}

}

this.editor.customConfig.onchange = (html) => {

this.info_ = html // 绑定当前逐渐地值

this.$emit('change', this.info_) // 将内容同步到父组件中

}

this. editor.customConfig.menus = [

'head', // 标题

'bold', // 粗体

'fontSize', // 字号

'fontName', // 字体

'italic', // 斜体

'underline', // 下划线

'strikeThrough', // 删除线

'foreColor', // 文字颜色

'backColor', // 背景颜色

'link', // 插入链接

'list', // 列表

'justify', // 对齐方式

'quote', // 引用

'emoticon', // 表情

'image', // 插入图片

'table', // 表格

'code', // 插入代码

'undo', // 撤销

'redo' // 重复

]

this.editor.create()

// this.editor.txt.html(this.desc)

// this.editor.txt.html(this.desc)

}

},

mounted () {

this.initE();

}

}

三、父组件中进行调用

3.1、创建父组件,这里我们创建文件add-or-update.vue文件

(1)导入子组件

(2)在comonents中创建组件

(3)使用组件

import editor from './editor'

components: {

EDITOR: editor,

}

3.2、代码汇总

import editor from './editor'

export default {

components: {

EDITOR: editor

},

data () {

return {

content:"",

isClear: false//清除富文本编辑器内容

}

}

},

methods: {

}

}

富文本编辑器完成,快去撸起你代码~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SqlSever分页查询,仅扫描一次表

数据库的分页查询一般由两个查询组成&#xff1a; select count(*) from Goods 和 select * from (select row_number() over(order by goodsId) as rowid, *from Goods ) as a where rowid > pageSize * (pageIndex - 1) 1 and rowid < pageSize * pageIndex 第一个查询…

嵌入式基础认识2:shell脚本的一些简单语法规则

一、关于shell的一些认识 1、shell语言&#xff0c;是一类编程语言。常用shell语言有sh、bash、csh、ksh、perl、python等。linux下最常用的脚本就是bash。 2、shell脚本&#xff0c;即把在命令行中输入的命令写成程序。这样可以避免反复地在命令行下手工输入命令的繁琐工作。…

DreamWeaver连接Tomcat用以编辑和测试JSP

2019独角兽企业重金招聘Python工程师标准>>> 3 、打开软件之后&#xff0c;大家选择【站点】中的【新建站点】 。 4 、填写要填的内容。 站点名称&#xff1a;可以随便起&#xff0c;只是用来区分站点用的。因为&#xff0c;可以建立多个站点。 本地根文件夹&…

2013多校第三场

hdu 4629 题意&#xff1a;给你n个三角形&#xff0c;问覆盖1~n次的面积各是多少&#xff0c;n < 50; 分析&#xff1a;取出所有端点和交点的x坐标&#xff0c;排序&#xff0c;然后对于每一段xi~xi1的范围的线段都是不相交的&#xff0c;所以组成的 面积要么是三角形&#…

TSS 任务状态段

TSS(任务状态段)1 什么是TSS TSS 全称task state segment&#xff0c;是指在操作系统进程管理的过程中&#xff0c;任务&#xff08;进程&#xff09;切换时的任务现场信息。 2 TSS工作细节 TSS在任务切换过程中起着重要作用&#xff0c;通过它实现任务的挂起和恢复。所谓…

Linux下C语言程序的内存布局

以下内容源于C语言中文网的内容学习与整理。如有侵权&#xff0c;请告知删除。 一、C语言内存布局 C程序所占用的内存&#xff0c;可以划分为以下几个部分。 1、栈区&#xff08;stack&#xff09;。由编译器自动分配释放&#xff0c;存放函数的参数值&#xff0c;局部变量的值…

HTML/CSS/Javascript代码在线压缩、格式化(美化)工具

CSS 格式化ProCSSor - http://procssor.com/CSS 压缩CSS Compressor - http://www.cssdrive.com/index.php/main/csscompressorHTML 格式化Tabifier - http://tools.arantius.com/tabifierHTML 压缩Compress HTML - http://www.textfixer.com/html/compress-html-compression.p…

【运动快乐】享受赤脚慢跑 收获健康快乐

享受赤脚慢跑 收获健康快乐——写给想锻炼的您当您看到赤脚客时&#xff0c;您或许忍不住会问&#xff1a;为什么要赤脚跑呢&#xff1f;不怕扎破脚&#xff1f;跑起来不会硌疼么&#xff1f;赤脚踩在看起来扎脚硌脚的路面上&#xff0c;因为怕疼&#xff0c;我们的脚落地会轻而…

微型计算机频繁死机的原因,电脑经常死机是什么原因|电脑经常死机的解决方法...

‍‍电脑出现死机是很常见的一种故障&#xff0c;造成的原因也有很多种。而最近有些用户的电脑经常死机&#xff0c;开机几分钟就死机&#xff0c;有时还会出现蓝屏&#xff0c;这到底是怎么回事呢&#xff1f;电脑经常死机是什么原因呢&#xff1f;下面小编结合自己的实际情况…

Linux系统命令行的符号含义

内容整理于网络&#xff0c;如有侵权&#xff0c;请告知删除。 1、常见符号含义 . 代表当前目录 .. 代表上一层目录&#xff0c;当前目录的父目录 - 代表前一个目录&#xff0c;我刚才从哪个目录cd过来 ~ 代表当前用户的宿主目录 / 代表根目录 $ 普通用户的命令行提示符…

ExtJs 分组表格控件----监听

ExtJs 分组表格控件----监听2013年8月1日10:59如图&#xff0c;点击expand可以展开所有的分组&#xff0c;collapse可以合并所有的列&#xff0c;toggle和toggleone展开合并一个分组Ext.get(expand).on(click, function() { grid.getView().expandAllGroups(); });…

PKI系统深入介绍

公钥基础设施&#xff08;Public Key Infrastructure&#xff0c;简称PKI&#xff09;是眼下网络安全建设的基础与核心&#xff0c;是电子商务安全实施的基本保障&#xff0c;因此&#xff0c;对PKI技术的研究和开发成为眼下信息安全领域的热点。本文对PKI技术进行了全面的分析…

html 禁止缩放 ios10,完美解决ios10及以上Safari无法禁止缩放的问题

完美解决 ios10 及以上 Safari 无法禁止缩放的问题转载自掘金-互联网学徒移动端web缩放有两种&#xff1a;双击缩放双指手势缩放在 iOS 10之前&#xff0c;iOS 和 Android 都可以通过一行 meta 标签来禁止页面缩放&#xff1a;但 iOS 10开始&#xff0c;meta 设置在 Safari 内无…

SCRT软件的使用教程

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 SCRT软件下载&#xff1a;提取码1234 快速链接的步骤与设置 先选择“快速链接”&#xff1b; 然后协议选serial&#xff0c;端口在设备管理器中查看&#xff08;我的是com3&#xff09;&#xff0c;波特率…

KEIL4.12中添加ULINK2的支持

转载自&#xff1a;http://www.amobbs.com/thread-4767650-1-1.html 如果你用KEIL4.12&#xff0c;但却没有Ulink2下载器&#xff0c;只有早先用的Ulink下载器&#xff0c;那么你按照下面三步升下级就可以了....三步&#xff1a;1.把‘keil-ulink升级至ulink2的文件’解压缩后拷…

解决Vmware中安装Ubuntu Server 14.04 分辨率无法全屏问题

2019独角兽企业重金招聘Python工程师标准>>> We will have to edit grub configuration. Open a terminal and paste this: sudo gedit /etc/default/grub Hit Enter. It will open grub preferences in Gedit.Locate the line # GRUB_GFXMODE800x600 (resolution m…

vue indev.html,webpack - Can't add script tag to Vue component files ( *.vue ) - Stack Overflow

Im new to vue.js.Im trying to render vue component file but when I add to vue component, for example, app/javascript/packs/components/app.vue file, compiling error happens in babel-loader.error logERROR in ./node_modules/babel-loader/lib??ref--1-0!./node…

GCC编译器的相关内容

本文摘录与整理于C语言中文网的相关内容&#xff0c;仅用于学习&#xff0c;如有侵权请告知删除。 原内容网址&#xff1a;C语言中文网&#xff1a;C语言程序设计门户网站(入门教程、编程软件) GCC官方文档网址&#xff1a;Top (Using the GNU Compiler Collection (GCC)) 1、…

HDU 4279 - Number

2012年天津赛区网赛的题目&#xff0c;想了好久&#xff0c;也没能想出来 还是小杰思路敏捷&#xff0c;给我讲解了一番&#xff0c;才让我把这个题做出来 f&#xff08;x&#xff09;x-phi&#xff08;x&#xff09;&#xff08;1——x与x互素个数&#xff09;-g&#xff08;x…

SQL SERVER2014 安装 Error code 0x858C001B.

原因是语言版本不一致,SQL SERVER是中文简体版&#xff0c;操作系统是英文版&#xff0c;在操作系统、控制面板&#xff0c;区域语言设置为中文就Ok啦。 TITLE: SQL Server Setup failure.------------------------------ssSQL Server Setup has encountered the following err…