在Vue中使用CodeMirror 格式显示错误 行数错乱 & 代码隐藏

项目需要在线展示和编辑Json文件,所以需要找一个代码编辑器,因为我们的项目直接使用的 vueAdmin-template 这个模板

json编辑器也是直接从 vue-element-admin 项目扒下来的……

//好吧 这个项目看起来很炫,其实有很多坑,我们组没人用过vue,又需要快速完成任务,就随便找了一个= =

 

JsonEditor.vue(和原项目比我改了一下





 

使用:

其中 jsonData 是json的字符串

 

开始的时候还在感叹好强大 但是随后,问题出现了……

 

第一个问题,一个页面有多个tab页,而json显示不在第一个tab页中,那么跳转到页面再点击json所在tab页……

嗯……默认显示不出来……

奇怪的事情是,当你点击一下,数据就出来了……更奇怪的事情是……甚至你拖一下开发者工具那个框,它也有可能就显示出来了,或者,你首先打开的tab也就是它,嗯,那也能显示出来……

 

对于这个问题,我选择了放弃,毕竟这可以解释为默认折叠的feature >_<

 

but,测试不听我解释并给我提出了个bug,还指出了一个更加丧病的bug……

在Vue中使用CodeMirror 格式显示错误 行数错乱 & 代码隐藏_第1张图片

如图,我把代码点开了,它竟然显示时这个shi样……(诡异的事情是,当行数变成10行以后它就显示正常了……

绝望……

更加绝望的事情是我百度了一年也没搜出来一点点相关信息……

 

无奈之下跑去找大神帮助。

 

总之最后解决的办法就是……

methods: {
    // ...
    refresh() {
      this.jsonEditor.refresh()
    }
}

为 jsonEditor 加一个 refresh() 函数

并在每一次切换tab页的时候,都调用该组件的 refresh() 

注意……不是直接调用……而是放入setTimeout中……

window.setTimeout(() => {
    this.$refs.jsonEditor1.refresh()
    this.$refs.jsonEditor2.refresh()
})

我都已经双眼含泪了,不管怎样,问题终于得到解决了。

 

嗯……最后呢……解决办法……其实是:

autoRefresh: true

具体如下:(亲测autoRefresh有些时候不生效,手动刷新比较稳妥……)

import 'codemirror/addon/display/autorefresh'

this.jsonEditor = CodeMirror.fromTextArea(this.$refs.textarea, {
      lineNumbers: true,
      mode: 'application/json',
      gutters: ['CodeMirror-lint-markers'],
      theme: 'rubyblue',
      lint: true,
      autoRefresh: true
})

 

好了,现在没问题了,不用手动refresh了……

 

心好累啊,这个故事教给我们一个道理,技术问题尽量用谷歌,用谷歌,用谷歌。。。。实在不能***,就去github讨论区去搜一搜。百度还是算了吧。。。。

 

至于 autoRefresh 怎么实现的: https://codemirror.net/addon/display/autorefresh.js

自行参考吧。

转载于:https://www.cnblogs.com/wenruo/p/8274958.html

你可能感兴趣的:(在Vue中使用CodeMirror 格式显示错误 行数错乱 & 代码隐藏)