vue CodeMirror 使用setValue存在的问题

博客探讨了在使用CodeMirror插件时遇到的数据回显问题,特别是通过`setValue`方法设置新值会导致二次输入时光标移动到行首,从而引发输入异常。建议在监听父组件变量变化时,直接将变量赋值给codeMirror的v-model,以避免光标定位错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CodeMirror 插件,具体安装使用就不说了。

只说下在数据回显时,使用setValue存在严重问题。

watch监听父类的变量时候,

不要用  this.$refs.mycode.codeMirror.setValue(newVal)

这样会导致你二次输入内容的时候,光标会跑到行头,导致严重输入问题。

应该在watch的时候  将监听的变量复制给codeMirror的v-model

 

 

### 集成和使用 CodeMirror #### 安装依赖包 为了在 Vue3 项目中集成 CodeMirror,首先需要安装 `codemirror` 和其他必要的扩展库。可以通过 npm 来安装这些依赖项: ```bash npm install codemirror ``` 这一步骤确保了项目的 node_modules 文件夹内包含了 Codemirror 及其相关资源[^3]。 #### 创建组件并引入基本配置 创建一个新的 Vue 组件来封装 CodeMirror 实例,并对其进行初始化设置。下面是一个简单的例子展示如何定义这个自定义组件: ```javascript // components/CodeEditor.vue <template> <div class="editor"> <!-- 这里放置实际的编辑区域 --> <textarea ref="textArea"></textarea> </div> </template> <script setup lang='ts'> import { onMounted, ref, watchEffect } from 'vue'; import CodeMirror from 'codemirror'; const props = defineProps({ code: String, }); let editorInstance; const textArea = ref(null); onMounted(() => { // 初始化 CodeMirror 编辑器实例 editorInstance = CodeMirror.fromTextArea(textArea.value, { lineNumbers: true, mode: "javascript", // 设置默认的语言模式 theme: "default" // 默认的主题样式 }); // 将父级传递下来的初始代码值赋给编辑器 editorInstance.setValue(props.code); // 监听 prop 的变化以更新编辑器中的内容 watchEffect(() => { if (props.code !== editorInstance.getValue()) { editorInstance.setValue(props.code); } }); }); </script> ``` 这段代码展示了如何在一个名为 `CodeEditor.vue` 的单文件组件中嵌入 CodeMirror 并对其做基础配置[^4]。 #### 使用组件于页面布局 接下来,在主应用或其他任何地方注册此组件,并通过属性绑定的方式向它传入一些参数比如预设代码字符串等信息: ```html <!-- App.vue 或者其他的 .vue 文件 --> <template> <div id="app"> <h1>Markdown Editor Example</h1> <CodeEditor :code="initialContent"/> <button @click="logCurrentText">Log Current Text</button> </div> </template> <script setup lang='ts'> import { ref } from 'vue'; import CodeEditor from './components/CodeEditor.vue'; const initialContent = ref(`# Welcome to my markdown editor`); const logCurrentText = () => { console.log(editorRef.value.editor.getValue()); }; </script> ``` 上述模板说明了怎样把之前创建好的 `CodeEditor` 放置到应用程序视图结构之中,并提供了一个按钮用于获取当前编辑区内的文本内容。 #### 主题与语言支持 对于希望更改外观风格或是增加不同编程语言高亮显示的支持来说,则可以访问位于 `node_modules/codemirror/theme/` 下面的不同 CSS 文件以及 `mode/` 文件夹下的 JavaScript 文件来进行相应调整[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值