Vue的checkbox相关

本文详细介绍了如何在Vue中使用v-model和v-for创建可全选的复选框组件,通过绑定长度判断全选状态,并提供了实现全选功能的具体代码示例。

普通checkbox

官网上的例子

<div id='example-3'>
  <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
  <label for="jack">Jack</label>
  <input type="checkbox" id="john" value="John" v-model="checkedNames">
  <label for="john">John</label>
  <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
  <label for="mike">Mike</label>
  <br>
  <span>Checked names: {{ checkedNames }}</span>
</div>
new Vue({
  el: '#example-3',
  data: {
    checkedNames: []
  }
})

【结果直接截图了】:
在这里插入图片描述

稍微改进一下,利用v-for

<div v-for="(item, index) in lists" :key="index">
	<input type="checkbox" v-model="checkdObj" :value="item.name">
	<label>{{item.name}}</label>
</div>
<div>
	checked: {{checkdObj}}
</div>
export default {
		name: 'Test',
		data() {
			return {
				checkdObj: [],
				lists: [
					{name: 'Jack'},
					{name: 'John'},
					{name: 'Mike'}
				]
			}
		}
	}

【结果直接截图】:
在这里插入图片描述

全选的checkbox

重要思路是,利用绑定长度判断来自动判定是否全选。即:
:checked=“checkObj.length === lists.length”
另外:
v-model所绑定的值是value属性

<div>
	<input type="checkbox" @change="chooseAllItem()" :checked="checkdObj.length === lists.length">
	<label>全选</label>
</div>
<hr>
<div v-for="(item, index) in lists" :key="index">
	<input type="checkbox" :value="item.name" v-model="checkdObj">
	<label>{{item.name}}</label>
</div>
<div>
	checked: {{checkdObj}}
</div>
export default {
		name: 'Test',
		data() {
			return {
				lists: [
					{name: 'Jack'},
					{name: 'John'},
					{name: 'Mike'}
				],
				checkdObj: []
			}
		},
		methods: {
			chooseAllItem() {
				if(this.checkdObj.length < this.lists.length) {
					for(let i in this.lists) {
						if(this.checkdObj.indexOf(this.lists[i].name) == -1) {
							this.checkdObj.push(this.lists[i].name);
						}
					}
				} else {
					this.checkdObj = [];
				}
			}
		}
	}

【结果也直接截图了】:
在这里插入图片描述在这里插入图片描述
【反向操作就不演示了。没有动图很麻烦。】
在这里插入图片描述在这里插入图片描述

简单总结:
如果checkbox绑定v-model是个数组。
这个数组的结果是选中的item。(item的值取决于value属性所绑定的值)
value属性和是否选中没有关系。

最后一个思考:
是不是无法用vue,用绑定checked的方式,给checked赋值?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值