vue全选反选

本文详细介绍了在Vue中实现全选和反选功能的方法,包括如何在数据渲染到页面后,处理父组件中数据变化的情况,以及如何在子组件中改变值并传递给父组件的操作步骤。

一、把数据渲染到页面

<li v-for="item in arr" :key="item.id">
  <input type="checkbox" v-model="item.c"/>
  <span>{{item.name}}</span>
</li>
  data() {
    return {
      arr: [
        {
          id:1,
          name: "猪八戒",
          c: false,
        },
        {
          id:2,
          name: "孙悟空",
          c: false,
        },
        {
          id:3,
          name: "唐僧",
          c: false,
        },
        {
          id:4,
          name: "白龙马",
          c: false,
        },
      ],
    };
  },

二、当数据在父组件 并在父组件改变

小选框加入这个值

v-model="item.checked"/

全选框加入这个值

v-model="isAll"

函数写在computed里面

    isAll:{
      get(){
        return this.arr.every(v=>v.c)//v.c是v.c===true的简写
      },
      set(val){
        this.arr.forEach(v=>{v.c=val})
      }
    }

三、当数据在父组件 子组件里使用、改变值

在子组件的小选框中将v-model="item.checked"改成以下内容

:checked="item.done"
@change="iptChange(item.id)"

添加方法 把对应的id传给父组件

  methods: {
    iptChange(id) {
      this.$emit('on-iptChange',id)
    },
  },

父组件接收方法

@on-iptChange='iptChangeFn'

父组件书写对应方法

    iptChangeFn(id){
      let todo=this.list.find(v=>v.id==id)
      todo.done=!todo.done
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值