富文本编辑器 wangeditor、Dialog中使用wangeditor、多次生成wangeditor实例

富文本编辑器如同我们在CSDN上写文章是的编辑框(如下图),使用场景通常是在编辑详细资料,内容。本次实习过程学习使用了wangeditor,是一个简洁,文档齐全的富文本工具。wangeditor官方文档: https://www.wangeditor.com/
在这里插入图片描述

注:开始时使用V5版本,npm过程无报错,但是在VUE中引入后报错样式包找不到(已引入),随后更替使用V4版本

1.安装以及引入

npm 安装 wangeditorV4版本:

 npm i wangeditor@4.x

在VUE页面中引入:

import E from 'wangeditor'

2.使用过程

具体需求:编辑/添加某个产品,出现对话框,对话框中富文本显示产品详情,并且能修改、添加产品详情。

wangeditor的使用是用过DOM获取到某节点元素,在该节点上生成的wangeditor实例。通过 this.editor.config.menus配置 菜单栏,更多配置项见官方文档:

this.editor = new E("#description");
this.editor.config.menus = [
	"head", //标题
	"foreColor", //字体颜色
    "bold", //加粗
    "image", //上传图片
    "list",  //自动排序为有序/无序列表
];
this.editor.create();

需求中的富文本要在dialog中显示,dialog未渲染时,无法使用Dom获取相关节点。则在mounted生命周期内创建wangeditor将会报错该节点无效。所以只能每次打开dialog时创建wangeditor实例,利用dialog的opened事件即可。

通常富文本编辑器的内容由前端获取到内容的HTML结构,以字符串传给后端接口,储存到数据库。编辑产品时,前端从接口获取富文本字符串,然后解析为HTML插入到富文本编辑器中。在文档接口中,可以直接使用this.editor.txt.html()获取到HTML字符串。

this.editor.txt.html()  //获取文本内容字符串

从接口获取HTML字符串显示时,走了个错招,想在富文本编辑器中插入一个DIV使用v-html显示已有的内容,结果在添加新的内容后再使用this.editor.txt.html()获取HTML时会自动复制一份已有内容并显示。后来仔细阅读文档后发现this.editor.txt.html()也可以用来初始化富文本内容。改用此方法后,顺利通过。

this.editor = new E("#description");
this.editor.create();
this.editor.txt.html('<p>用 JS 设置的内容</p>')  //设置文本内容字符串

需要注意的是,不手动清除,内容将永远存留。在每次关闭dialog时,应该将实例的内容清零,并销毁,避免不同产品、不同操作显示情况与数据库内储存内容不一致。同样利用dialog的closed事件:

onclose(){
	this.editor.txt.html("");
    this.editor.destroy();
    this.editor = null;
}

完整代码:
HTML

<el-button @click="getData()">open ago dialog</el-button>
<el-button @click="dialogVisible = true">open new dialog</el-button>
<el-dialog
   :visible.sync="dialogVisible"
   @opened="onOpened()"
   @closed="onClosed()"
 >
 	//富文本挂载节点
 	<div id="description"></div>
 	<span slot="footer" class="dialog-footer">
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="send()">确 定</el-button>
  </span>  
</el-dialog>

JS

export default {
  data() {
    return {
  		dialogVisible: false,
  		description: '' 
    }
  }
  methods: {
   //打开dialog
	onOpened() {
	   //创建新的富文本编辑器, 配置菜单项
	  this.editor = new E("#description");
      this.editor.config.menus = [
        "head", //标题
        "foreColor", //字体颜色
        "bold", //加粗
        "image", //上传图片
        "list",  //自动排序为有序/无序列表
      ];
      this.editor.create();
      this.editor.txt.html(this.description);
    },
    //关闭dialog, 清空数据,销毁实例,避免数据重复 
    onClosed() {
      this.editor.txt.html('');
      this.editor.destroy();
      this.editor = null;
      this.description = ''
    },
    //模仿获取到接口已经存在的富文本数据,并插入页面
    async getData(){
    	let data = await api(XXXX) //会先执行getData,然后执行onOpened渲染
    	console.log(data)
    },
    //模仿获取文本内容,发送到接口
    async send(){
    	this.description = this.editor.txt.html(); //获取HTML结构
    	let data = await api(this.description) 
    	consloe.log(data)	
	}
  }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值