如何将 Emit 与 v-model 一起使用?

Posted

技术标签:

【中文标题】如何将 Emit 与 v-model 一起使用?【英文标题】:how to use an Emit with a v-model? 【发布时间】:2021-12-30 22:37:58 【问题描述】:

我在 Vue3 上,我尝试从子级到父级捕获一个值。 所以我的代码是:

在父级上:

<template>
  <input-form v-model="valueSuperficie" label="Surface en m²" />
</template>

<script>
   data() 
     return 
      valueSuperficie = null,
      
   
</script>

我试着在孩子身上发出一个声音。

<template>
<input 
      v-on:change="$emit('userEntry', $event.target.valueInput)"
      v-model="userEntry"
/>
</template>

<script>
  data() 
    return 
      userEntry: this.valueInput,
    ;
  ,
  emits: ["userEntry"],

</script>

我知道我的代码不正确,我想要的是成功存储child的值,即userEntry在parent的数据valueSuperficie中。 谢谢

【问题讨论】:

【参考方案1】:

在子组件中定义一个名为 modelValue 的 prop 并发出一个名为 update:modelValue 的事件:

<template>
   <input 
      v-on:input="$emit('update:modelValue', $event.target.value)"
      :value="modelValue"
/>
</template>

<script>
export default
  props:
     modelValue:String
    ,
  emits: ["update:modelValue"],

</script>

【讨论】:

【参考方案2】:

我想子组件名称是input-form。 父级应使用回调函数处理子级触发的事件。该函数将是一个将接收到的值分配给名为valueSuperficie的内部值的方法。

所以父母应该是这样的:

<template>
  <input-form @user-entry="onUserEntry" label="Surface en m²" />
</template>

<script>
   data() 
     return 
      valueSuperficie = null,
      
   ,
   methods: 
     onUserEntry(valueInput) 
       this.valueSuperficie = valueInput;
     
   
</script>

【讨论】:

以上是关于如何将 Emit 与 v-model 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 v-model 与 v-select 一起使用,其中初始 v-model 值不在 items 标记中

Vue 3 使用 v-model 作为 props 而不是 :prop 和 @emit

在 Vue 3 中,如何使自定义组件与 v-model 一起用于复选框组? [复制]

vue(2/3)中在组件上使用v-model

如何在输入中一起使用 :value 和 v-model

将v-model与对象一起使用尤其是通过VueJS中的几个嵌套组件是不是很糟糕?