代码编辑器组件通过 emit 触发 update:content 或 change 事件向父组件回传修改后的内容,子组件监听编辑行为并 emit 新值,父组件用 v-model:content 或 @change 接收更新。

代码编辑器组件(比如基于 Monaco 或 CodeMirror 封装的 Vue 组件)向父组件回传修改后的内容,核心就是用 emit 触发自定义事件,把新文本作为参数传出去。关键在于:子组件内部监听编辑行为(如输入、粘贴、撤销),然后主动 emit;父组件监听并接收,更新自身数据。
子组件:监听编辑动作并 emit 内容
假设你封装了一个 <codeeditor></codeeditor> 组件,内部使用 ref 或 v-model 绑定编辑器实例或内容值:
- 在 setup 中通过
defineEmits声明可触发的事件,例如['update:content', 'change'] - 监听编辑器的 change / input / valueChanged 等原生回调(具体名取决于你用的编辑器库)
- 每次内容变动时调用
emit('update:content', newValue)或emit('change', newValue) - 如果支持 v-model 语法糖,推荐用
update:content,这样父组件可直接写v-model:content="code"
父组件:用 v-on 或 v-model 接收并响应
父组件不需要手动调用子组件方法,而是通过事件监听获取最新文本:
- 方式一(显式监听):
<codeeditor></codeeditor>,然后在handleCodeChange(newText)中赋值给响应式变量 - 方式二(v-model 语法糖):
<codeeditor v-model:content="code"></codeeditor>,前提是子组件正确触发update:content事件,且父组件有code = ref('') - 注意:v-model 绑定的变量必须是 ref 或 reactive 的响应式对象,否则更新不会触发视图刷新
实际代码片段示意(Vue 3 + setup)
子组件 CodeEditor.vue:
父组件中使用:
当前内容:{{ userCode }}
<script setup><br> import { ref } from 'vue'<br> import CodeEditor from './CodeEditor.vue'<br> const userCode = ref('function hello() {\n return "Hi";\n}')<br> </script>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











