v-model 不能用于 v-for

VueCompilerError: v-model 不能用于 v-for 或 v-slot 范围变量,因为它们不可写。为什么?

<template>
  <div v-for="service in services" :key="service.id">
    <ServicesItem v-model="service"></ServicesItem >
  </div>
</template>
<script lang="ts">
import ServicesItem from "@js/components/ServicesItem.vue"

export default defineComponent({
  components: { ServicesItem },
  setup() {
    const services = ref([
      {
        id: 1,
        name: "Service 1",
        active: false,
        types_cars: {
          cars: {},
          suv: {},
        },
      },
    ])

    return {
      services,
    }
  },
})
</script>

最佳实践是什么?反应式对象传输

stack overflow v-model cannot be used on v-for
原文答案
author avatar

接受的答案

好的,所以发生的事情是变量“服务”是虚拟的。它不存在,它只是某个点(迭代)的真实对象“服务”的一部分。

如果您想将该迭代“附加”到您的组件,您需要提供一个 real 对象,在您的情况下,可以这样做:

<div v-for="(service, i) in services" :key="service.id">
    <ServicesItem v-model="services[i]"></ServicesItem >
</div>

答案:

作者头像

同样的问题,我用其他自定义道具更改了 modelValue 道具,它对我来说很好用。老的:

const props = defineProps({
    modelValue: {
        type: Object,
        required: true
    }
})

新的:

const props = defineProps({
    field: {
        type: Object,
        required: true
    }
})

组件: <MyComponent :field="service"/>

而不是 <MyComponent :v-model="service"/>