提问人:Camilo Casadiego 提问时间:11/6/2023 更新时间:11/10/2023 访问量:17
使用复杂动态模型时,Vue 复选框绑定不起作用
Vue checkbox binding not working when using a complex dynamic model
问:
我正在使用从数据库中生成的带有一堆问题的动态表单,基本上是以问题数组的形式,所有字段都按预期工作,但我的复选框行为错误,只需选择一个项目即可将其全部选中,但是当我只使用一个全新的对象时,它按预期工作, 这是构建失败问题的 json(这是数组的一部分):
{
"id": 11,
"question": "Check all coverages that apply:",
"options": "{\"values\": [\"Group Medical\", \"Dental\", \"Vision\", \"Voluntary Supplemental Life\", \"Voluntary Supplemental Life for Spouse/Dependents\", \"Short-Term Disability\", \"Long-Term Disability\", \"Health FSA\", \"HRA\", \"Wellness Program\", \"AFLAC\", \"MEC (Minimum Essential Coverage) Plan\", \"Dependent Care FSA\", \"HSA\", \"Tobacco Surcharge\"]}",
"section_id": 10,
"form_position": 1,
"type": 1,
"liability": 0,
"weight": 0,
"title": "For a more accurate assessment, please complete this form:",
"subtitle": "",
"is_main": 1,
"section_type": 0
}
这是失败的代码:
<div class="ms-2 ps-5 mb-3" v-for="(question, questionIndex) in initialQuestions[mainKey]" :key="question.id">
<h5 class="question-title">{{question.question}}</h5>
<h1>{{question.id}}</h1>
<div class="row">
<div class="col-12">
<div>
<p>{{'Papa: ' + initialAnswers[question.id]}}</p>
<div v-if="question.type === 0" v-for="(option, optionIndex) in question.options" class="form-check">
<!-- render input -->
</div>
<div v-else-if="question.type === 1" v-for="(option, optionIndex) in question.options" :key="option" class="form-check">
<input
class="form-check-input"
type="checkbox"
:id="option"
v-model="initialAnswers[question.id]"
:value="option">
<label class="form-check-label"
:for="option">
{{option}}
</label>
</div>
<div v-else-if="question.type === 2">
<!-- render select -->
</div>
</div>
</div>
</div>
</div>
如果我检查我使用的复选框的组合对象,我会得到这个,如您所见,答案 11 应该是一个数组,但在原始值上,它只显示“true”:
最后,如果我不使用动态生成的模型,而是将 a 绑定到输入模型,它可以完美地工作,我错过了什么?const checkedNames = ref([])
如果有任何使用,这就是我初始化模型的方式,案例 1 用于复选框
const initialAnswers = ref([])
for (const [key, value] of Object.entries(initialQuestions.value)) {
console.log(`${key}: ${value}`);
value.forEach((obj) => {
switch(obj.type){
case 0:
initialAnswers[obj.id] = ref('')
break;
case 1:
initialAnswers[obj.id] = ref([])
break;
case 2:
case 3:
initialAnswers[obj.id] = ref()
break;
}
//initialAnswers[obj.id] = obj,type === 0 ref([])
})
}
答:
0赞
Camilo Casadiego
11/10/2023
#1
问题与我如何初始化基本组件有关,最初代码是:
initialAnswers['' + obj.id] = ref([])
当必须时
initialAnswers.value['' + obj.id] = ref([])
更改此设置后,组件将按预期工作
评论