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

为何将defineModel绑定到computed属性后无法更新?

问题原因及解决方案

错误原因

你犯了两个核心错误:

  1. defineModel() 返回的是一个ref对象,它的 .value 字段需要存储具体的字符串值,但你直接把它赋值成了 computed() 返回的响应式对象——这相当于让 model.value 指向了computed实例,而非实际的输入值,自然无法同步更新。
  2. computed() 本身是一个带 .value 的响应式容器,你跳过了取值步骤,根本没拿到 query 的实际内容,只是把容器本身赋值给了 model.value。

正确实现方式

方式1:单向同步(输入框改query,自动同步到model)

用 watch 监听 query 的变化,实时更新 model:

import { watch } from 'vue';

watch(query, (newQueryVal) => {
  model.value = newQueryVal;
});

方式2:双向同步(model或query变化,另一方也同步)

如果需要双向绑定效果,用带get/set的computed作为中间层:

import { computed } from 'vue';

const syncData = computed({
  get() {
    return query.value;
  },
  set(newVal) {
    query.value = newVal;
    model.value = newVal;
  }
});

然后把输入框的 v-model 绑定到这个computed:

<input v-model="syncData" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:58:15