vue2 $emit input
时间: 2025-01-07 18:02:44 浏览: 51
### 如何在 Vue 2 中使用 `$emit` 触发 `input` 事件
在 Vue 2 中,组件之间的通信通常依赖于父组件向子组件传递属性 (props),而子组件则可以通过 `$emit` 方法通知父组件某些特定事件的发生。对于处理输入框 (`<input>`) 的双向绑定情况,可以利用自定义事件来实现父子组件间的交互。
当需要模拟原生 HTML 输入控件的行为时,在子组件内部修改数据并告知父级更新其状态是非常常见的做法。具体到 `<input>` 类型元素上,为了保持一致性,应该发射名为 `"input"` 的事件,并携带新的值作为参数传给父组件[^1]。
下面是一个简单的例子展示如何创建一个可重用的文本框组件:
```html
<!-- ChildComponent.vue -->
<template>
<div class="child-component">
<!-- 使用 @input 而不是 v-on:change 或者其他方式 -->
<input :value="modelValue" @input="updateInput"/>
</div>
</template>
<script>
export default {
name: 'ChildComponent',
props: ['modelValue'], // 接收来自父组件的数据模型
methods: {
updateInput(event){
const newValue = event.target.value;
this.$emit('input', newValue); // 向外发送新值
}
}
}
</script>
```
接着是在父组件里调用这个子组件的方式如下所示:
```html
<!-- ParentComponent.vue -->
<template>
<div id="app">
<label for="text">Enter some text:</label>
<ChildComponent v-model.trim="message"></ChildComponent>
<p>You entered: {{ message }}</p>
</div>
</template>
<script>
import ChildComponent from './components/ChildComponent';
export default {
components: { ChildComponent },
data(){
return{
message:''
};
}
};
</script>
```
在这个案例中,通过 `v-model` 实现了自动化的 prop 和 `$emit` 配合工作模式,使得开发者不需要显式地编写额外代码就可以完成表单字段与 JavaScript 变量之间同步操作。
值得注意的是,如果想要监听由父组件传递下来的 `prop` 属性变化,则需按照规定的方法设置侦听器。例如针对基本类型的 `props` 数据变更监测,应当采用箭头函数形式返回目标变量以便正确追踪更改[^2]。
阅读全文
相关推荐



















