You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue项目中Quasar的q-input输入变更时未触发emit事件的原因是什么?

问题原因

你遇到的问题是Quasar组件和原生input的事件传值规则不同导致的,具体有两个核心问题:

  • 事件参数结构不匹配
    原生HTML <input> 的@input事件传递的是原生Event对象,需要通过e.target.value取输入值;但Quasar的<q-input>对事件做了封装,@input事件回调的第一个参数直接是输入框的当前文本值,没有封装成事件对象。你父组件中仍然写e.target.value,相当于从字符串值上读取不存在的target属性,得到undefined,因此状态更新失败,看起来就像事件没有触发。
  • (可选优化)v-model用法不规范
    你父组件使用了Vue的v-model:name语法,按照官方规范,子组件只要emitupdate:name事件即可完成双向绑定,不需要额外自定义事件监听。

修正方案

方案1:最小改动(保留现有自定义事件)

仅修改父组件AddTask.vue的事件回调逻辑,直接使用事件返回的输入值即可:

<template>
    <ModalName 
       v-model:name="taskToSubmit.name" 
       @changeName:name="(val)=>taskToSubmit.name = val"
    />
</template>

方案2:规范v-model用法(更简洁)

子组件ModalName.vue修改emit事件名:

<template>
    <div class="row q-mb-sm">
        <q-input
            :value="name" 
            @input="$emit('update:name', $event)"
        />
    </div>
</template>

<script>
export default {
    props: ["name"],
}
</script>

父组件AddTask.vue直接删掉多余的事件监听:

<template>
    <ModalName 
       v-model:name="taskToSubmit.name" 
    />
</template>

内容的提问来源于stack exchange,提问作者Prasanga Thapaliya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:15:01