CodeEditor.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <div class="space-y-4">
  3. <!-- <div class="flex items-center justify-between text-gray-800">-->
  4. <!-- <span class="w-[60px] text-sm">语法</span>-->
  5. <!-- <ElSelect v-model="selectedLanguageVal" @change="changeLanguage">-->
  6. <!-- <el-option v-for="li in language" :key="li" :value="li">{{li}}</el-option>-->
  7. <!-- </ElSelect>-->
  8. <!-- </div>-->
  9. <div ref="editorContainer" style="height: 240px;"></div>
  10. </div>
  11. </template>
  12. <script setup lang="ts">
  13. import { ref, onMounted, onUnmounted } from 'vue'
  14. import * as monaco from 'monaco-editor'
  15. // const language = ref(['javascript','python']);
  16. // let selectedLanguageVal = ref('javascript')
  17. const editorContainer = ref<HTMLElement | null>(null)
  18. let editor = ref(null) as any;
  19. onMounted(() => {
  20. try {
  21. if(!editorContainer.value){
  22. console.log('编辑器挂载节点没获取到')
  23. return
  24. }
  25. editor.value = monaco.editor.create(editorContainer.value, {
  26. value: [
  27. 'function x() {',
  28. ' console.log("Hello world!");',
  29. '}'
  30. ].join('\n'),
  31. language: 'javascript',
  32. theme: 'vs-dark',
  33. automaticLayout: true,
  34. fixedOverflowWidgets: true,
  35. });
  36. // 防止冒泡
  37. editor.value.onKeyDown((e:Event) => {
  38. e.stopPropagation();
  39. });
  40. }catch (err){
  41. console.error("Monaco 创建失败:", err);
  42. }
  43. });
  44. onUnmounted(() => {
  45. if (editor.value) {
  46. editor.dispose();
  47. }
  48. });
  49. // // 动态设置模型语言
  50. // const changeLanguage = ()=>{
  51. // console.log('changeLanguage', selectedLanguageVal.value,editor.value );
  52. // if(editor.value){
  53. // const model = editor.value.getModel()
  54. // if (model) {
  55. // monaco.editor.setModelLanguage(model, selectedLanguageVal.value)
  56. // }
  57. // }
  58. // }
  59. </script>