为何使用自定义+/-按钮时update:model-value事件未触发,手动输入却正常?
问题原因及解决方案
原因
@update:model-value是Quasar的q-input组件内部专属触发的事件,只有当用户通过输入框自身的交互(比如手动输入、组件内置的输入逻辑)修改绑定值时,组件才会主动抛出这个事件。而你点击+/-按钮时,是直接在组件外部修改了props.row.qty的数值,这种外部修改行为不会被q-input感知到,自然不会触发update:model-value事件。
解决方案
有两种简单的处理方式:
方式一:在按钮点击事件中直接调用doUpdate()
修改按钮的点击逻辑,每次增减数值后主动触发更新:
<template v-slot:body-cell-qty="props"> <q-td :props="props"> <div class="column items-end"> <q-input style="max-width: 120px;" dense outlined color="blue-grey-9" input-style="text-align: center" input-class="cell-input-dense" debounce="800" v-model="props.row.qty" @update:model-value="doUpdate()"> <template v-slot:prepend> <q-btn round dense flat icon="remove" @click="props.row.qty--; doUpdate()" /> </template> <template v-slot:append> <q-btn round dense flat icon="add" @click="props.row.qty++; doUpdate()" /> </template> </q-input> </div> </q-td> </template>
方式二:通过监听props.row.qty的变化触发更新
在组件的watch选项中监听props.row.qty的变动,一旦数值变化就调用doUpdate():
// 组件的script部分 export default { // ...其他代码 watch: { 'props.row.qty': { handler() { this.doUpdate() }, deep: true // 如果props.row是嵌套对象,需要开启深度监听 } } }
内容的提问来源于stack exchange,提问作者AP87
相关产品推荐
相关产品推荐

