• codeMirror在setValue后只有在聚焦的时候才会生效


    参考链接
    如果setTimeOut设置的值100不行,并且编辑器设置在dialog中,可以尝试v-if来试试能否解决v-if="scriptEditorVisible",
    改变字体大小可以通过setTimeOut来重新延迟刷新codemirror

    <template>
      <div :style="wrapStyle">
        <textarea ref="mycode" v-model="code" @refresh="refreshValue"></textarea>
      </div>
    </template>
    
    <script>
    import { iscriptString } from "../../assets/js/chartExample.js";
    // 核心样式
    import "codemirror/lib/codemirror.css";
    // 引入主题后还需要在 options 中指定主题才会生效
    
    // 需要引入具体的语法高亮库才会有对应的语法高亮效果
    import "codemirror/mode/javascript/javascript.js";
    
    // require active-line.js
    import "codemirror/addon/selection/active-line.js";
    
    let CodeMirror = require("codemirror/lib/codemirror");
    
    export default {
      name: "codeMirror",
      data() {
        return {
          editor: null,
          options: {
            mode: "javascript",
            tabSize: 0, // 缩进格式
            lineNumbers: true, // 显示行号
            autofocus: true, //初始化时自动获取焦点
            autoRefresh: true,
          },
        };
      },
      methods: {
        // 获取编辑器的值
        getEditor() {
          return this.editor.doc.getValue();
        },
        // 将值传给父组件去更新
        setEditor() {
          this.$emit("setEditor", iscriptString(this.typeChart));
          return this.editor.doc.setValue(iscriptString(this.typeChart));
        },
        // 传值进来设置
        setCodeEditor(val) {
          this.editor.doc.setValue(val);
          setTimeout(() => {
            this.editor.refresh();
          }, 100);
        },
        undo() {
          // 判断是否与原来的代码一致,一致就操作
          let chartCode = this.code;
          if (chartCode !== this.getEditor()) {
            this.editor.doc.undo();
          }
        },
        redo() {
          this.editor.doc.redo();
        },
        refresh() {
          // return this.editor.refresh();
          setTimeout(() => {
            this.editor.refresh();
          }, 1);
        },
        refreshValue() {
          alert();
        },
    
        _initEditor() {
          if (!this.editor) {
            this.editor = CodeMirror.fromTextArea(this.$refs.mycode, this.options);
          }
          this.editor.setValue(this.value || this.code);
          this.editor.setSize("auto", this.editorHeight);
        },
      },
      mounted() {
        this.$nextTick(() => {
          this._initEditor();
        });
      },
      watch: {
        code() {
          this.$nextTick(() => {
            this._initEditor();
          });
        },
        wrapStyle() {
          setTimeout(() => {
            this.refresh();
          }, 100);
        },
      },
      computed: {
        wrapStyle() {
          return { fontSize: this.fontSize + "px" };
        },
      },
      props: {
        fontSize: {
          type: String,
        },
        // 内部真实的内容
        code: {
          type: String,
          default: "",
        },
        // 图表类型
        typeChart: {
          type: String,
          default: "",
        },
        // 脚本编辑器高度
        editorHeight: {
          type: String,
          default: "600px",
        },
      },
    };
    </script>
    
    <style>
    
  • 相关阅读:
    windows查询占用端口的pid以及查询对应的进程名称
    [转]Android学习系列(29)App调试的几个命令实践
    [原]Android中接入微信客户端心得
    Robots.txt使用指南
    SqlHelper中使用事务
    QQ 影音,功能手札
    Access 2007数据库压缩和修复数据库功能
    dhl:PetShop里面的sqlHelper相关操作
    dhl:svn客户端学习TortoiseSVN的基本使用方法
    从 if else 到设计模式的转变
  • 原文地址:https://www.cnblogs.com/yx1102/p/13572690.html
Copyright © 2020-2023  润新知