美文网首页
vue集成wangeditor3.0版本 解决光标乱跳等问题

vue集成wangeditor3.0版本 解决光标乱跳等问题

作者: 流泪手心_521 | 来源:发表于2020-11-27 09:12 被阅读0次

    是因为封装了组件后,使用父级传入的内容,每次输入都会触发wangEditor的onchange事件,而在onchange事件中又使用了子传父的方式将修改后的值赋给父组件,父组件的值改变后导致子组件wangEditor的值也被修改,所以出现光标总是跳转到最后。此时,并发的还有另外一个问题就是,撤销和恢复点击后无效。

    <template lang="html">
     <div class="editor">
       <div class="toolbar"
         ref="editor"
         style="text-align:left"
       >
     </div>
     </div>
    </template>
    
    <script>
      import E from 'wangeditor'
      import emojiJSON from '@/assets/emoji.json'
      import emojiMonkeyJSON from '@/assets/emojimonkey.json'
      import emojiRabbitJSON from '@/assets/emojirabbit.json'
      export default {
        name: 'editoritem',
        data() {
          return {
            editor: null,
            info_: null,
            isChange:false,
            emojiList:emojiJSON,
            emojiMonkeyList:emojiMonkeyJSON,
            emojiRabbitList:emojiRabbitJSON
          }
        },
        model: {
          prop: 'value',
          event: 'change'
        },
        props: {
          value: {
            type: String,
            default: ''
          },
          isClear: {
            type: Boolean,
            default: false
          }
        },
        watch: {
          // isClear(val) {
          //   // 触发清除文本域内容
          //   if (val) {
          //     this.editor.txt.clear()
          //     this.info_ = null
          //   }
          // }
          // ,
          value: function(value) {
            // if (value !== this.editor.txt.html()) {
            //   this.editor.txt.html(this.value)
            // }
            if(!this.isChange){
                 this.editor.txt.html(this.value);
            }
             this.isChange= false;
          }
          //value为编辑框输入的内容,这里我监听了一下值,当父组件调用得时候,如果给value赋值了,子组件将会显示父组件赋给的值
        },
        mounted() {
          this.seteditor()
          this.editor.txt.html(this.value)
        },
        methods: {
          seteditor() {
            // http://192.168.2.125:8080/admin/storage/create
            this.editor = new E(this.$refs.editor);
            this.editor.customConfig.uploadImgShowBase64 = true // base 64 存储图片
            this.editor.customConfig.uploadImgServer = '/file/uploadPreview'// 配置服务器端地址
            this.editor.customConfig.uploadImgHeaders = {
                dbToken: this.$store.state.dbToken
            }// 自定义 header
            this.editor.customConfig.uploadFileName = 'file' // 后端接受上传文件的参数名
            this.editor.customConfig.uploadImgMaxSize = 2 * 1024 * 1024 // 将图片大小限制为 2M
            this.editor.customConfig.uploadImgMaxLength = 6 // 限制一次最多上传 3 张图片
            this.editor.customConfig.uploadImgTimeout = 3 * 60 * 1000 // 设置超时时间
    
           this.editor.customConfig.emotions = [
                 {
                   title: 'QQ',
                   type: 'image',
                   content: this.emojiList
                 },
                 {
                   title: 'monkey',
                   type: 'image',
                   content: this.emojiMonkeyList
                 },
                 {
                   title: 'rabbit',
                   type: 'image',
                   content: this.emojiRabbitList
                 }
            ];
            // 配置菜单
            this.editor.customConfig.menus = [
              'head', // 标题
              'bold', // 粗体
              'fontSize', // 字号
              'fontName', // 字体
              'italic', // 斜体
              'underline', // 下划线
              'strikeThrough', // 删除线
              'foreColor', // 文字颜色
              'backColor', // 背景颜色
              'list', // 列表
              '|',
              'justify', // 对齐方式
              'quote', // 引用
              'emoticon', // 表情
              'image', // 插入图片
              '|',
              'table', // 表格
              'undo', // 撤销
              'redo', // 重复
              'fullscreen' // 全屏
            ]
             this.editor.customConfig.uploadImgHooks = {
                customInsert: function(insertImg, result, editor) {
                let url = Object.values(result.data)
                JSON.stringify(url)
                insertImg(url[3])
               }
             };
            this.editor.customConfig.onchange = (html) => {
              this.isChange = true;
              this.info_ = html // 绑定当前逐渐地值
              this.$emit('change', this.info_) // 将内容同步到父组件中
            }
            // 创建富文本编辑器
            this.editor.create()
          }
        }
      }
    </script>
    
    <style lang="css">
      .editor {
        width: 100%;
        margin: 0 auto;
        position: relative;
        z-index: 0;
      }
      .toolbar {
        border: 1px solid #ccc;
      }
      .text {
        border: 1px solid #ccc;
        min-height: 500px;
      }
    </style>
    

    相关文章

      网友评论

          本文标题:vue集成wangeditor3.0版本 解决光标乱跳等问题

          本文链接:https://www.haomeiwen.com/subject/ppmziktx.html