vue中创建的组件a,修改页面中某一个a 其余a的数据也会同步发生变化

发布于 2022-09-04 04:02:02 字数 2900 浏览 20 评论 0

    ready(){
        var myTextarea=document.getElementById("myeditor")
        var _self = this;

        var editor=CodeMirror.fromTextArea(myTextarea, {
             lineNumbers: true,//设置行号 boolean
             value: 'SELECT * FROM table',//编辑框初始值 string
             mode: 'text/x-mysql',//当前code模式 模式的选择可以在CodeMirror.modes中查看
             height: 100,//高度
             indentUnit: 4,//缩进块用多少个空格表示 默认是2
             autofocus: true,
             //此处是引用sql-hint.js的配置项
             hintOptions:{
                 completeSingle: false, //当匹配只有一项的时候是否自动补全
                    tables: {
                        table1: ['name', 'score', 'birthDate'],
                        table2: ['name', 'population', 'size']
                    }
             },//表元信息
             extraKeys: {//快捷键 可提供三种模式 sublime、emacs、vim。 使用时需要引入js支持包
                 "F9": function (editor) {
                     format(editor);
                 },
                 "F8": function (editor) {
                     query(editor);
                 }
                 }

            });
            //变成组件实例的属性 方便其他方法中调用codemirror实例
            // this.editor = editor;

            editor.on("change", function(editor, change) {//任意键触发autocomplete
                //此处逻辑用来控制button按钮的状态
                if(editor.getValue() !== ""){
                    _self.textCon = false;
                }else{
                    _self.textCon = "disabled";
                }
           if (change.origin == "+input"){
               var text = change.text;
               //if(!ignoreToken(text))//不提示
               setTimeout(function() { editor.execCommand("autocomplete"); }, 20);
           }
        });
    },

methods:{

        toggleSQlTMPL(){
            this.showSQLTMPL=!this.showSQLTMPL

            $(this.$els.sqleditor).css({
                width:this.showSQLTMPL?'calc( 100% - 140px)':'100%'
            })
        },
        changeDB(event){
            this._changeDB(this.uid,this.$refs.dbselector.value)
        },
        addTemplate(event,param){
            // console.log(param)
            // console.log(this.getSQLTemplate)
            var sqlString = this.getSQLTemplate[param];
            var initCon = this.getTabData.editor.getValue();
            // var initCon = this.editor.getValue();
            if(initCon == ""){
                console.log(this.getTabData.editor);
                this.getTabData.editor.setValue(sqlString);
                // this._changeSQL(this.uid,sqlString);
            }else{
                console.log(this.getTabData.editor);
                this.getTabData.editor.setValue(initCon + '\n' + sqlString);
                // this._changeSQL(this.uid,initCon + '\n' + sqlString);
            }
        },
    },

组件a中在ready生命周期函数中调用codemirror的方法,现在修改页面组件某一个a,其余a的数据也会发生变化,怎么解决? 如何让组件中的editor变为每个组件私有的部分?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情痴 2022-09-11 04:02:02

不要用 getElementById 通过 id 来获取元素。
应该通过 ref(Vue.js 2.0) 标记元素,然后用 $refs(Vue.js 2.0) 来获取元素。
Vue.js 1.0 的方法参考文档 API。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文