angular6+codeMirror实现浏览器在线SQL编辑器并支持智能提示

前言:

由于我司是一个作大数据的公司,要给数据科学家们作一个在线探索数据的产品,近来有一个在线写SQL代码的需求。话很少说,开始:css

依赖:

    使用npm包安装ng2-codemirror组件:node

npm install ng2-codemirror -- save

由于该组件须要codemirror,因此须要再安装codemirror的依赖mysql

npm install codemirror -- save

好啦,全部的依赖都装好了。sql

使用:

在须要使用的组件的module中引入ng2-codemirror:npm

import { CodemirrorModule } from 'ng2-codemirror';
@NgModule({
  imports: [
    CodemirrorModule
  ]
})

接下来就能够在组件中直接使用codemirror了!json

import { Component } from 'angular2/core';

@Component({
  selector: 'sample',
  template: `
    <codemirror [(ngModel)]="code"
      [config]="cmOptions">
    </codemirror>
  `
})

export class Sample{
  constructor(){
   private code: any = '';
   private cmOptions: any = '';
  }
}

至此,codemirror就算集成到angular中了。可是,你会发现一个问题,codemirror的样式不见啦!!!这可咋办,别急,咱们须要引入codemirror的css文件。可是此时又发现无法直接在ts文件中引入node_module中的css文件。angular2

因此我选择在在根目录的angular.json做为静态资源引入全局。大数据

"styles": [
  "node_modules/codemirror/lib/codemirror.css"
]

引入完以后发现,纳尼,怎么不起做用。仔细一想,引入静态资源须要重跑项目。项目重跑以后发现,OK了。接下来就须要支持sql输入。this

咱们在使用codemirror的组件中引入:spa

import * as CodeMirror from 'codemirror';
import 'codemirror/mode/sql/sql';
import 'codemirror/addon/hint/show-hint.js';
import 'codemirror/addon/hint/sql-hint.js';

而后将codemirror的参数加上:

export class Sample{ 
   constructor(){ 
    private code: any = '';
    private cmOptions: any = {
      lineNumbers: true,                     //显示行号
      mode: { name: "text/x-mysql" },          //定义mode
      extraKeys: {
        "'a'": this.completeAfter,
        "'b'": this.completeAfter,
        "'c'": this.completeAfter,
        "'d'": this.completeAfter,
        "'e'": this.completeAfter,
        "'f'": this.completeAfter,
        "'g'": this.completeAfter,
        "'h'": this.completeAfter,
        "'i'": this.completeAfter,
        "'j'": this.completeAfter,
        "'k'": this.completeAfter,
        "'l'": this.completeAfter,
        "'m'": this.completeAfter,
        "'n'": this.completeAfter,
        "'o'": this.completeAfter,
        "'p'": this.completeAfter,
        "'q'": this.completeAfter,
        "'r'": this.completeAfter,
        "'s'": this.completeAfter,
        "'t'": this.completeAfter,
        "'u'": this.completeAfter,
        "'v'": this.completeAfter,
        "'w'": this.completeAfter,
        "'x'": this.completeAfter,
        "'y'": this.completeAfter,
        "'z'": this.completeAfter,
        "'.'": this.completeAfter,
        // "'='": this.completeIfInTag,
        "Ctrl-Enter": "autocomplete",
        Tab: function (cm) {
          var spaces = Array(cm.getOption("indentUnit") + 1).join(" ");
          cm.replaceSelection(spaces);
        }
      },   //自动提示配置
    };
  } 
}

好了,此时就能够愉快的写SQL了。还支持智能提示哟,支持回车键 和 TAB键。下面贴出效果图:

 

-------END-------

相关文章
相关标签/搜索