You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中实现复选框勾选时动态修改对应图片的方法

实现勾选切换图片的方案

首先先修正模板里的一个小问题:v-for的key应该绑定item.id而不是store.id,否则会导致列表渲染异常,修正后的模板开头是:

<div v-for="item in store.items" :key="item.id">

接下来分两种常见场景实现图片切换:

场景1:每个项有独立的勾选后图片

步骤1:给store的items添加勾选图片路径

在state的每个item对象里新增checkedUrl字段,存储勾选后的图片地址:

state: () => ({
   checkeds: [],
   items: [
     {
       "id": "1",
       "url": "../assets/imagen.svg",
       "checkedUrl": "../assets/imagen-checked.svg", // 勾选后显示的图片
       "title": "imagen"
     },
     {
       "id": "2",
       "url": "../assets/imagen2.svg",
       "checkedUrl": "../assets/imagen2-checked.svg",
       "title": "imagen2"
     },
     // 其他项同理补充checkedUrl
   ]
})

步骤2:动态绑定图片src

在<img>标签里用三元表达式判断当前项是否被勾选(即item.title是否在checkeds数组中),切换对应的图片地址:

<img 
  :src="store.checkeds.includes(item.title) ? item.checkedUrl : item.url" 
  :alt="item.title" 
  width="30"
  height="30"
>

场景2:所有项勾选后用同一张通用图片

如果不需要每个项单独的勾选图,直接用统一的选中图标,那不用修改store,直接在模板里写死替换路径即可:

<img 
  :src="store.checkeds.includes(item.title) ? '../assets/common-checked.svg' : item.url" 
  :alt="item.title" 
  width="30"
  height="30"
>

进阶:用计算属性简化模板

如果觉得模板里的判断逻辑太啰嗦,可以在组件里定义计算属性,提前处理每个项的勾选状态:

// 组件的computed选项中
computed: {
  processedItems() {
    const checkeds = this.$store.state.checkeds;
    return this.$store.state.items.map(item => ({
      ...item,
      isChecked: checkeds.includes(item.title)
    }))
  }
}

然后模板里遍历这个计算属性,图片绑定更简洁:

<div v-for="item in processedItems" :key="item.id">
  <input 
    type="checkbox"
    :value="item.title"
    v-model="$store.state.checkeds"
    :id="item.id"
  >
  <img 
    :src="item.isChecked ? item.checkedUrl : item.url" 
    :alt="item.title" 
    width="30"
    height="30"
  >
</div>

内容的提问来源于stack exchange,提问作者Luis Fernando Perez Varajas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:54:18