当前位置:   article > 正文

vue中使用wangEditor富文本编辑器(踩坑)_wangeditor vue

wangeditor vue

一、wangEditor介绍及使用

wangEditor —— 轻量级 web 富文本编辑器,配置方便,使用简单。支持 IE10+ 浏览器。

  请根据 具体 版本查看对应版本的 文档 v4、v5用法不一样!

下载

使用

二、vue中使用

1.npm install wangeditor (注意 wangeditor 全部是小写字母

2.引入import E from "wangeditor"; //引入富文本插件

3.创建实例

  1. var editor = new E('#editor')
  2. // 或者 var editor = new E(document.getElementById('editor'))
  3. //事实上传入类名也是可以的var editor = new E(document.getElementsByClassName(editor))
  4. //应该document.getElement开头的都可以但是一般没人这么干
  5. editor.create()

new E()传入挂载的地方

create()创建

一个页面有多个

  1. var editor1 = new E('#div1', '#div2')
  2. editor1.create()

更多说明以及API请看wangEditor官方文档

三、踩坑即报错

1.可能会遇到的报错

这个错说明你实例要挂载的dom还不存在

2.当你需要让这个富文本显示与隐藏(v-show)时可能会存在创建多个实例

其实这个只需要清除让当前挂载元素的innerHtml清空即可。 

四、循环创建富文本以及多个富文本实例叠加解决方案

场景:比如评论列表点击回复出在下面出现一个富文本框

1.如果使用v-show来实现

重点是要清除

 ele.innerHTML = "";

  1. <template>
  2. <div class="hello">
  3. <div v-for="item in items" :key="item.id" v-if="first">
  4. <p>{{item.message}}</p>
  5. <button @click="a(item)">回复</button>
  6. <div :id="item.id" v-show="item.show"></div>
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. import E from "wangeditor"; //引入富文本插件
  12. export default {
  13. name: "HelloWorld",
  14. data() {
  15. return {
  16. items: [
  17. //原数组
  18. { message: "Foo", show: false, id: 1 },
  19. { message: "Bar", show: false, id: 2 },
  20. ]
  21. };
  22. },
  23. methods: {
  24. a(i) {
  25. //循环遍历
  26. var arr = this.items.map((item, index) => {
  27. //点击获取的id和原来的数据比较
  28. if (item.id == i.id) {
  29. //获取富文本挂再节点
  30. var ele = document.getElementById(item.id);
  31. //创建富文本
  32. var editor = new E(ele);
  33. if (i.show) {
  34. item.show = false;
  35. if (ele) {
  36. //清空挂载节点
  37. ele.innerHTML = "";
  38. }
  39. } else {
  40. editor.create();
  41. item.show = true;
  42. }
  43. }
  44. return item;
  45. });
  46. //赋值
  47. this.items = arr;
  48. },
  49. },
  50. };
  51. </script>
  52. <!-- Add "scoped" attribute to limit CSS to this component only -->
  53. <style scoped>
  54. </style>

2.v-if实现

重点是创建需要在this.$nextTick里创建

  1. <template>
  2. <div class="hello">
  3. <div v-for="item in items" :key="item.id" v-if="first">
  4. <p>{{item.message}}</p>
  5. <button @click="a(item)">回复</button>
  6. <div :id="item.id" v-if="item.show"></div>
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. import E from "wangeditor"; //引入富文本插件
  12. export default {
  13. name: "HelloWorld",
  14. data() {
  15. return {
  16. items: [
  17. //原数组
  18. { message: "Foo", show: false, id: 1 },
  19. { message: "Bar", show: false, id: 2 },
  20. ]
  21. };
  22. },
  23. methods: {
  24. a(i) {
  25. var arr = this.items.map((item, index) => {
  26. if (item.id == i.id) {
  27. if (i.show) {
  28. item.show = false;
  29. } else {
  30. item.show = true;
  31. this.$nextTick(() => { //因为v-if需要立即拿到节点这里是重点必须写到$nextTick
  32. var ele = document.getElementById(item.id);
  33. var editor = new E(ele);
  34. editor.create();
  35. });
  36. }
  37. }
  38. return item;
  39. });
  40. this.items = arr;
  41. },
  42. },
  43. };
  44. </script>
  45. <!-- Add "scoped" attribute to limit CSS to this component only -->
  46. <style scoped>
  47. </style>

可以根据你的需求来选择实现方式。

五、总结

wangEditor是一个轻量级的富文本编辑器插件,不仅能在vue中使用还可以在react/Angular中使用。并且以上方法在react中稍微变通也可以使用。

其它 还有 富文本 编辑器 :

vue-quill-editor 

https://www.kancloud.cn/liuwave/quill/1409423icon-default.png?t=N7T8https://www.kancloud.cn/liuwave/quill/1409423
TinyMCE
http://tinymce.ax-z.cn/icon-default.png?t=N7T8http://tinymce.ax-z.cn/

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号