Vuetify中v-for遍历对象按属性值控制v-checkbox的勾选与禁用
现有代码存在的核心问题
- 条件逻辑错误:
v-if="value = true"使用单等号执行赋值操作,而非双等号/三等号的判断逻辑。运行时会把遍历到的每个权限值强制覆写为true,直接篡改原始abilities对象的结构,后续的else分支永远不会触发。 - 状态绑定错误:所有勾选态的复选框统一绑定全局
Check变量,所有未勾选态的复选框统一绑定全局Uncheck变量。即便判断逻辑修正,同状态的复选框也会出现双向同步联动的问题,无法独立匹配每个权限的真实状态。 - 结构冗余错乱:循环渲染时,一部分复选框被嵌套在
v-row容器内,另一部分直接放置在v-col节点下,布局结构不对齐,完全没必要拆分两个v-if分支重复渲染相同的复选框组件。
适配需求的正确实现
所有复选框为禁用纯展示状态,不需要拆分渲染分支,也不需要定义Check、Uncheck两个全局变量,直接遍历权限对象、单向绑定每个权限的布尔值即可。
替换后的模板代码:
<v-col md="3" v-for="(permValue, permKey) in getSingleUser.abilities" :key="permKey" > <v-checkbox :label="permKey" :model-value="permValue" disabled ></v-checkbox> </v-col>
data中原有定义的Check、Uncheck变量可直接删除,无使用场景。
该实现的渲染效果完全匹配需求:值为true的ABA、DENVER权限自动渲染为勾选状态,其余值为false的权限渲染为未勾选状态,所有复选框全程禁用不可交互,且单向绑定的逻辑不会反向修改原始权限对象的数据。
内容的提问来源于stack exchange,提问作者Mina
相关产品推荐
相关产品推荐

