(check.png)
(checkbox.png)
(checkDisable.png)
以上三张图是我的可选择状态,已选中,以及不可选择等三种;接下来来写几种使用情景;具体样式我不再细写了,只说逻辑,需要说明image需要放在你所选择的循环里,比如如下,仅做展示,样式可以根据需要写
1:只支持单选,并且都可以选择
<image v-if="orderarr.length!=0" @click="toCheck(item.id)" class="check" :src="orderarr.includes(item.id)?'/static/img/check.png':'/static/img/checkbox.png'"></image> 这里是表示,已选中是选中状态,未选中则是可选择状态
<image v-else @click="toCheck(item.id)" class="check" src="/static/img/checkbox.png"></image> 这里是表示当前需要选择的内容全部可选
其中的orderarr是你所选中的id数组,includes方法是判断当前数组是否包含当前循环的id
check方法
toCheck(id){
if(this.orderarr.length==0){//判断当前id数组是否为空,若是为空,则直接push
this.orderarr.push(id)
}else{
this.orderarr=[]//由于当前逻辑是单选,直接清空再push就好了
this.orderarr.push(id)
}
console.log(this.orderarr); },
2:支持多选,并且所有选项均可选择
toCheck(id){
if(this.orderarr.length==0){//判断当前id数组是否为空,若是为空,则直接push
this.orderarr.push(id)
}else{
if(this.orderarr.includes(id)){//判断当前点击的选项是否已经被选择了
this.orderarr.forEach((val,index) => {
if(val==id){//若被选择,则清除调当前选项
this.orderarr.splice(index,1);
}
});
} else{
this.orderarr.push(id)//若没有被选择,则直接push
}
}
console.log(this.orderarr);
},
3:支持多选,并且,当某选项只可单选时,其他选项禁止点击;
<view v-show="isSuperpose"> 当前为已选中状态,其中其他选项不可点击
<image v-if="couponArr.length!=0" @click="toCheck(c)" class="check" :src="couponArr.includes(c.id)?'/static/img/check.png':'/static/img/checkDisable.png'"></image>
<image v-else @click="toCheck(c)" class="check" src="/static/img/checkbox.png"></image>
</view>
<view v-show="!isSuperpose"> 当前为已选中状态,其中其他选项可以点击选择
<image v-if="couponArr.length!=0" @click="toCheck(c)" class="check" :src="couponArr.includes(c.id)?'/static/img/check.png':'/static/img/checkbox.png'"></image>
<image v-else @click="toCheck(c)" class="check" src="/static/img/checkbox.png"></image>
</view>
toCheck方法
toCheck(item){
console.log(item.superpose);
if(this.isSuperpose){//如果当前除已选中状态外,其他选项不可点击
if(this.couponArr.includes(item.id)){//判断当前点击的是否已经被选择,若当前选项已被选择,则当前点击操作是取消选中,并可以选择其他选项
this.couponArr.forEach((val,index) => {
if(val==item.id){
this.couponArr.splice(index,1);
}
});
this.isSuperpose=false
} else{
//因为其与选项不可点击,所以不作操作
}
}else{
if(item.superpose==1){//我们是在接口中返回是当前选择项是否可多选,当值为1时,不可多选
if(this.couponArr.length==0){
this.couponArr.push(item.id)//未选中时,直接push
}else{
console.log(this.couponArr);//若有已选中选项,但由于当前项只可单选,则直接清空couponArr,在push
this.couponArr=[]
this.couponArr.push(item.id)
}
this.isSuperpose=true//并将状态修改成其他选项不可选择
}else{//若当前选择项可以多选
if(this.couponArr.length==0){
this.couponArr.push(item.id)//未选中时,直接push
}else{剩下多选的逻辑则同上
if(this.couponArr.includes(item.id)){
this.couponArr.forEach((val,index) => {
if(val==item.id){;
this.couponArr.splice(index,1);
}
});
} else{
this.couponArr.push(item.id)
}
}
this.isSuperpose=false
}
}
},