vue2使用富文本wangeditor

安装

npm i wangeditor --save

引用

import E from 'wangeditor';

使用

javascript 复制代码
        // 富文本初始化
        initEditor() {
            this.isEdit = true;
            this.$nextTick(() => {
                this.editor = new E(this.$refs.editorElem); //绑定节点
                this.editor.config.height = 550; //默认高度为 300,设置高度时不需要添加单位
                this.editor.config.zIndex = 100;
                this.editor.config.placeholder = ''; //当设置为空时,可以清除提示文字
                this.editor.config.focus = false; //可以取消自动聚焦
                this.editor.config.showLinkImg = false;
                this.editor.config.filterJs = false;
                this.editor.config.uploadImgMaxLength = 1;
                this.editor.config.uploadImgMaxSize = 2 * 1024 * 1024; // 2M
                this.editor.config.customUploadImg = async file => {
                    console.log(file[0]);
                    const reader = new FileReader();
                    reader.readAsDataURL(file[0]);
                    const formData = new FormData();
                    formData.append('file', file[0]);
                    formData.append('module', 'proposal');
                    const { data } = await Upload(formData);
                    if (data.code === 200) {
                        console.log(data.data.fullPath);
                        this.editor.cmd.do(
                            'insertHTML',
                            `<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5"><img src=${data.data.fullPath} /></div`
                        );
                    }
                };
                // 隐藏发送消息的添加视频、表格、代码、分割线功能
                this.editor.config.excludeMenus = [
                    'head',
                    'video',
                    'code',
                    'splitLine',
                    'link',
                    'list',
                    'todo',
                    'foreColor',
                    'backColor',
                    'quote',
                    'emoticon',
                    'strikeThrough', // 删除线
                    'underline', // 下划线
                    'italic', // 斜体
                    'bold', // 粗体
                    'fontSize', // 字号
                    'fontName', // 字体
                ];
                console.log('this.chapterList', this.chapterList);
                this.$nextTick(() => {
                    if (this.editor == null) {
                        this.editor.create();
                        this.editor.txt.html('');
                    } else {
                        this.editor.destroy(); //判断编辑器是否被创建,如果创建了就先销毁。
                        this.editor.create();
                        this.$nextTick(() => {
                            let content = '';
                            this.chapterList.chapterContent.forEach(item => {
                                if (item.content) {
                                    content += item.content
                                        .replace(/\n\n\n/g, '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;')
                                        .replace(/\n\n/g, '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
                                    content = content.replace(/\n/g, `<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`);
                                }
                                // 图片回显
                                if (item.image.path) {
                                    content += `<div class="img" style="width: 100%;display: flex;flex-direction: column;justify-content: center;align-items: center;"><img src=${item.image.path} /><div style="font-size: 14px;">图${this.chapterList.chapterIndex}-${item.image.index}  <span class="img-title">${item.image.title}</span></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`;
                                }
                                // 表格回显
                                if (item.table.title) {
                                    content += `<div class="table" style="width:100%;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span>表${this.chapterList.chapterIndex}-${item.table.index}  ${item.table.title}</span><table border="1" cellspacing="0" cellpadding="0" style="width: 100%;"><tbody><tr>`;
                                    item.table.head.forEach(item => {
                                        content += `<th>${item}</th>`;
                                    });
                                    content += `<tr>`;
                                    item.table.content.forEach(item => {
                                        content += `<tr>`;
                                        item.forEach(item => {
                                            content += `<td>${item}</td>`;
                                        });
                                        content += `</tr>`;
                                    });
                                    content += `</tbody></table></div><div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5"></div>`;
                                }
                            });
                            content = `<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5">${content
                                .replace(`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`, ``)
                                .replace(new RegExp('°E。'), `°E。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`)}</div>`;
                            this.editor.txt.html(content);
                        });
                    }
                });
            });
        },

在data(){}中定义editor:

javascript 复制代码
export default {
    data() {
        return {
            editor: null,
        };
    },

然后根据需求调用就好了,

this.$nextTick(()=>{})中处理的数据是因为后端返回来的数据结构是数组,遍历赋值标签转字符串的处理操作,如果后端返回来的是字符串直接赋值就好了。

注意:

要使用this.$nextTick(()=>{}),有时候会有渲染不上报错的问题。

相关推荐
PieroPc2 小时前
Python tkinter写的《电脑装配单》和 Html版 可打印 可导出 excel 文件
python·html·电脑
幽络源小助理2 小时前
Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)
python·html·python爬虫·爬虫教程·requests_html·爬取书籍·掌阅
前端Hardy2 小时前
HTML&CSS:惊!3D 折叠按钮
css·3d·html
IT女孩儿5 小时前
JavaScript--WebAPI查缺补漏(二)
开发语言·前端·javascript·html·ecmascript
请叫我飞哥@7 小时前
HTML5适配手机
前端·html·html5
WebDeveloper200111 小时前
如何使用美国域名中心US Domain Center和WordPress创建商业网站
运维·服务器·css·网络·html
真的很上进14 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
Hello_WOAIAI17 小时前
批量将 Word 文件转换为 HTML:Python 实现指南
python·html·word
GISer_Jing20 小时前
2025年前端面试热门题目——HTML|CSS|Javascript|TS知识
前端·javascript·面试·html
坐望云起20 小时前
什么是WebAssembly?怎么使用?
html·web·wasm·js