Vue 3使用PrimeVue Checkbox点击无法正常勾选取消问题求助
问题原因
PrimeVue Checkbox 是受控组件,必须绑定响应式状态才能响应交互更新选中状态,你当前的代码没有为组件绑定任何状态值,因此点击后没有对应的状态变更触发视图更新。
修复方案
方案1:子组件内部维护状态(仅子组件内部使用选中值时使用)
直接修改FormElement组件代码如下:
<template> <div> <Checkbox v-model="checked" /> </div> </template> <script lang="ts"> import Checkbox from "primevue/checkbox" import { defineComponent } from "vue" export default defineComponent({ name: "FormElement", components: { Checkbox }, // 新增响应式状态存储选中值 data() { return { checked: false } } }) </script>
方案2:支持父组件双向绑定(需要父组件获取/控制选中值时使用)
第一步:修改FormElement组件,支持v-model传入
<template> <div> <Checkbox :modelValue="modelValue" @update:modelValue="$emit('update:modelValue', $event)" /> </div> </template> <script lang="ts"> import Checkbox from "primevue/checkbox" import { defineComponent } from "vue" export default defineComponent({ name: "FormElement", components: { Checkbox }, props: { modelValue: { type: Boolean, default: false } }, emits: ['update:modelValue'] }) </script>
第二步:父组件使用时绑定状态
<template> <div class="test"> <FormElement v-model="formChecked" /> </div> </template> <script lang="ts"> import { defineComponent } from "vue" import FormElement from "@/components/FormElement/FormElement.vue" export default defineComponent({ name: "Home", components: { FormElement, }, data() { return { formChecked: false } } }) </script>
注意事项
- 单个独立复选框的v-model绑定值为布尔类型,选中为
true,未选中为false - 多个复选框组成选择组时,v-model绑定数组类型,每个Checkbox指定
value属性,选中的项的value会自动存入绑定的数组中
内容的提问来源于stack exchange,提问作者DnD2k21
相关产品推荐
相关产品推荐

