Vue中如何让v-if控制未渲染div内的checkbox保持选中状态
需求实现可行性分析
你描述的原生需求无法直接实现。
v-if判定为false时,对应的整个div及内部checkbox会被完全从DOM树中移除,页面中不存在该DOM元素,自然不存在「选中」这个仅属于存在的DOM元素的状态属性。
你可以根据实际业务场景选择以下替代方案,实现同等效果:
- 方案1:将
v-if替换为v-show
如果你只是要视觉上隐藏该选项,仍保留DOM节点,把原来的<div v-if="!isAuto">修改为<div v-show="!isAuto">即可。v-show仅通过display: none控制元素可见性,checkbox节点仍存在于DOM中,只要你绑定的sendReminder值为true,该checkbox就会保持选中状态,只是用户不可见。
对应修改后的代码片段:<div v-show="!isAuto" class="c-input-container__input-wrapper" > <label class="c-input-container__checkable"> <input id="edit-send-reminder-vue" type="checkbox" name="send_reminder-vue" :checked="sendReminder" class="c-input-container__checkable-element" > - 方案2:保留
v-if,在表单提交逻辑中补全参数
如果你必须使用v-if销毁节点,且实际要的是「提交表单时该字段按选中处理」的业务效果,不需要纠结DOM元素状态,直接在提交逻辑里加判断即可:当isAuto为true(即checkbox未被渲染)时,主动往提交参数里添加send_reminder-vue: true即可。 - 方案3:仅需维护数据状态,不需要DOM节点
如果你要的只是sendReminder这个绑定的变量值保持为true,和DOM是否渲染无关,直接在业务逻辑中给sendReminder赋值为true即可,v-if的渲染逻辑不会影响Vue组件内的变量值。
内容的提问来源于stack exchange,提问作者NoviceDev
相关产品推荐
相关产品推荐

