最近做项目需要用富文本编译器,上次使用的tinymce把我坑了一通,这次换了个更坑爹的Wangeditor。我要说的内容就是自己踩到的坑和解决方法。
首先要安装插件:npm install wangeditor
官方文档https://www.kancloud.cn/wangfupeng/wangeditor3/335774,写的很简单,不过要仔细阅读。
按照官方文档的指示(里面还有vuejs的demo(伪)真好),进行配置,大概就是这样
制作了一个富文本编辑器的组件,但是没有本地上传,放到项目上也没法获取到里面的内容,中看不中用。那么只好自己动手丰衣足食了,开始进行修改。
先解决本地上传图片问题,这个简单,文档是有写的很清楚。
// 配置服务器端地址
editor.customConfig.uploadImgServer = "/upload.php";
//自定义一个参数名
editor.customConfig.uploadFileName = "filename";
// 将图片大小限制为 3M
editor.customConfig.uploadImgMaxSize = 3 * 1024 * 1024;
加入这三句话以后问题迎刃而解。
第二问题父组件获取不到内容,那就做一个子组件和父组件相互传值的功能。
//父组件中:
//引入子组件
import WangEditor from "@/components/common/WangEditor";
//注册组件
comonents:{
WangEditor
}
//使用组件
//接收参数
methods: {
catchData(value){
this.content=value //在这里接受子组件传过来的参数,赋值给data里的参数
},
}
问题出在子组件上,怎么把内容传到父组件中。这个也不难的。
//子组件中:
editor.customConfig.onchange = html => {
//把获取的内容传给父组件
this.$emit('catchData',html);
};
这样一个编辑功能就完成了,但是还没有完,编辑错了肯定要修改的,怎么办?
首先要把父组件的值传给子组件
//父组件
//子组件
props: {
content:{required:true}
},
//文档上说了一个初始化内容的方法
editor.txt.html("内容");
//合理修改
editor.create();
//放在上面那句话之后这个要注意。
editor.txt.html(this.content);
但是把这句话写进去后什么都没发生。假文档??但是刷新后出现了 。。。我???
经研究发现,先加载的编辑器后加载的数据结果导致数据没写进去。坑爹的异步加载。。这个异步加载把我折腾的很惨,到网上找文档,没有一个靠谱的,闹得我想骂娘。苦水吐到这里,开始解决问题。
解决方法就是通过watch监听来完成的。上代码。把一开始的 进行修改后的终极代码
这样就ok了。原理很简单就是把变量声明成全局变量,然后监听加载
最后一个问题,这个编译器放在手机端上看的时候会炸窝,解决方法有两种。
第一种,在全局样式中添加
.w-e-toolbar {
flex-wrap: wrap;
}
第二种修改js源文件 wangEditor.js中的4661行,加上 flex-wrap: wrap;就好了。
以上就是我踩得的坑以及解决方法。谢谢大家支持。