在vue中使用codemirror格式化JSON

1. 下载指定版本的包 (避免引发不必要的错误)

yarn add codemirror@^5.64.0

2. 导入需要的文件


  import CodeMirror from 'codemirror'
  import 'codemirror/addon/lint/lint.css'
  import 'codemirror/addon/fold/foldgutter.css'
  import 'codemirror/lib/codemirror.css'
  import 'codemirror/theme/rubyblue.css'
  import 'codemirror/mode/javascript/javascript'
  import 'codemirror/addon/lint/lint'
  import 'codemirror/addon/lint/json-lint'

  // 折叠
  import 'codemirror/addon/fold/foldgutter.css'
  import 'codemirror/addon/fold/foldcode'
  import 'codemirror/addon/fold/foldgutter'
  import 'codemirror/addon/fold/brace-fold'
  import 'codemirror/addon/fold/comment-fold'

3. 注册

<template>
  <textarea ref="mycode" class="textarea" v-model="logInfo"></textarea>
</template>

<script>
  import * as jsonlint from 'json-lint'
  window['jsonlint'] = jsonlint
  import CodeMirror from 'codemirror'
  import 'codemirror/addon/lint/lint.css'
  import 'codemirror/addon/fold/foldgutter.css'
  import 'codemirror/lib/codemirror.css'
  import 'codemirror/theme/rubyblue.css'
  import 'codemirror/mode/javascript/javascript'
  import 'codemirror/addon/lint/lint'
  import 'codemirror/addon/lint/json-lint'

  // 折叠
  import 'codemirror/addon/fold/foldgutter.css'
  import 'codemirror/addon/fold/foldcode'
  import 'codemirror/addon/fold/foldgutter'
  import 'codemirror/addon/fold/brace-fold'
  import 'codemirror/addon/fold/comment-fold'

  export default {
    data() {
      return {
        logInfo: null,
        editorText: null
      }
    },
    components: {},

    created() {},
    async mounted() {
      const result = await this.$api.getLogDataInfo(null, this.$route.query.serialNo)
      this.logInfo = JSON.stringify(result)
      this.editorText = CodeMirror.fromTextArea(this.$refs.mycode, {
        mode: 'application/json',
        lineNumbers: true, // 显示行号
        tabSize: 2,
        lint: true,
        styleActiveLine: true,
        foldGutter: true, // 启用折叠效果
        gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'], // 配置折叠参数
      })
      var jsonData = JSON.stringify(result) //result是请求的后台数据
      var res = JSON.stringify(JSON.parse(jsonData), null, 4) //格式化后的json字符串形式
      this.editorText.setValue(res) //设置数据

      // 获取数据
      this.editorText.on('change', () => {
       console.log(this.editorText.getValue())
      })
    },
    methods: {}
  }
</script>
<style lang="scss">
  .CodeMirror {
    height: 100vh;
    overflow: hidden;
  }
</style>

4. 效果

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 使用 CodeMirror 可以通过两种方式:使用官方的 Vue 组件或者手动在 Vue 创建 CodeMirror 实例。 无论哪种方式,都可以通过 CodeMirror 提供的 `autoFormatRange` 函数对文本进行格式化。下面以使用官方的 Vue 组件为例来说明如何在 Vue 使用 CodeMirror格式化代码。 首先,在 Vue 项目安装 CodeMirrorCodeMirrorVue 组件: ``` npm install codemirror vue-codemirror --save ``` 然后,在 Vue 注册 CodeMirror 组件: ```javascript import Vue from 'vue' import VueCodemirror from 'vue-codemirror' import 'codemirror/lib/codemirror.css' // 引入 CodeMirror 样式文件 import 'codemirror/theme/material.css' // 引入 CodeMirror 主题文件 import 'codemirror/mode/javascript/javascript.js' // 引入 JavaScript 语法模式文件 Vue.use(VueCodemirror) ``` 在组件使用 CodeMirror: ```html <template> <div> <codemirror v-model="code" :options="options"></codemirror> </div> </template> <script> export default { data () { return { code: '', options: { tabSize: 2, // Tab 缩进大小为 2 mode: 'javascript', // 指定语言为 JavaScript theme: 'material' // 指定主题为 Material } } }, methods: { format () { const editor = this.$refs.myCodeMirror.getCodeMirror() const from = editor.getCursor(true) const to = editor.getCursor(false) editor.autoFormatRange(from, to) } } } </script> ``` 以上代码,`options` 是 CodeMirror 的配置项,`format` 方法调用了 `autoFormatRange` 函数对文本进行格式化。需要注意的是,需要通过 `this.$refs.myCodeMirror.getCodeMirror()` 获取 CodeMirror 实例才能调用 `autoFormatRange` 函数。 当然,以上只是一个简单的示例,实际使用可能需要根据具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值