概述
组件使用
<s-checkbox-group :sCheckedGroup="sCheckedGroup" v-model="checked" name="a"></s-checkbox-group>
<s-checkbox-group :sCheckedGroup="sCheckedGroup1" v-model="checked1" @change="handlclick" name="a1"></s-checkbox-group>
data(){
return {
checked:[1,3],
checked1:[1],
sCheckedGroup:[
{label:'选项1',value:1},
{label:'选项2',value:2},
{label:'选项选项3',value:3},
],
sCheckedGroup1:[
{label:'选项1',value:1,disabled:"true"},
{label:'选项2',value:2,disabled:"true"},
{label:'选项选项3',value:3},
]
}
},
methods:{
handlclick(val){
console.log(val)
}
}
checked值为数组,传value值得数组集合进去即可
组件
<template>
<div class="s-checkbox-bigBox">
<span class="s-checkbox-box" v-for="item,index in sCheckedGroup"
:class="{
'is-disabled': item.disabled,
'is-checked': model[index]
}"
@click.stop="chooseSCheckbox(item,index)"
>
<span class="s-checkbox__inner"></span>
<input type="checkbox" v-model="model[index]" :value="model" id="s-checkbox" class="s-checkbox" >
<label class="s-label" style="">{{item.label}}</label>
</span>
<!-- :value="curValue(item.value)" -->
</div>
</template>
<script>
export default {
name:"sCheckboxGroup",
data(){
return {
curValue(val){
// if(this.value&&this.value!=""){
// this.model=this.value;
// return this.value
// }else{
// return val
// }
},
model:[],
}
},
props:{
sCheckedGroup:{
type:Array,
default:[]
},
disabled:Boolean,
value:{
type:Array,
default:[]
},
},
computed:{
isDisabled(){
return this.disabled
},
},
watch: {
},
methods:{
chooseSCheckbox(val,index){
if(val.disabled){
return false;
}
this.model[index]=!this.model[index];
this.model.push(false);
// 返回value值
let arr= this.model.slice(0,this.sCheckedGroup.length);
let newArr=[];
for(let i in this.sCheckedGroup){
if(arr[i]){
newArr.push(this.sCheckedGroup[i].value)
}
}
this.$emit('change',newArr);
this.$emit('input', newArr);
}
},
created(){
console.log(this.value)
for(let i in this.sCheckedGroup){
this.model[i]=false;
for(let n in this.value){
if(this.value[n]==this.sCheckedGroup[i].value){
this.model[i]=true;
}
}
}
}
}
</script>
<style scoped>
.s-checkbox__inner{
border: 1px solid #dcdfe6;
width: 14px;
height: 14px;
background-color: #fff;
position: relative;
cursor: pointer;
display: inline-block;
box-sizing: border-box;
top: 2px;
}
.s-checkbox__inner:after {
box-sizing: content-box;
content: "";
border: 1px solid #fff;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
position: absolute;
top: 1px;
transform: rotate(45deg) scaleY(1);
width: 3px;
transition: transform .15s ease-in .05s;
transform-origin: center;
}
.s-checkbox-box{
cursor: pointer;
display: inline-block
}
.s-checkbox-box.is-checked .s-checkbox__inner {
border-color: #008DFF;
background: #008DFF;
}
.s-checkbox-box.is-checked .s-label{
color:#008DFF
}
.s-label{
cursor: pointer;
margin-left:4px;
margin-right:30px;
color:#606266
}
.s-checkbox{
outline: none;
position: absolute;
z-index: -1;
top: 4px;
left:1px;
right: 0;
bottom: 0;
margin: 0;
}
.s-checkbox-box{
position: relative;
cursor: pointer;
}
.s-checkbox-bigBox{
/* display: inline-block; */
margin:10px 0
}
.s-checkbox-box.is-disabled{
cursor: not-allowed;
}
.s-checkbox-box.is-disabled .s-checkbox__inner{
background: #EEEEEE;
cursor: not-allowed;
}
.s-checkbox-box.is-disabled label{
color: #868686;
cursor: not-allowed;
}
.s-checkbox-box.is-disabled .s-checkbox__inner:after{
background: #EEEEEE;
border-color:#EEEEEE;
cursor: not-allowed;
}
.s-checkbox-box.is-disabled.is-checked label{
color:#868686
}
.s-checkbox-box.is-disabled.is-checked .s-checkbox__inner{
border-color: #DCDFE6;
}
.s-checkbox-box.is-disabled.is-checked .s-checkbox__inner:after{
border-color:#A0A0A0;
}
</style>
Props
参数说明
属性 | 类型 | 参数说明 | 参数 | 默认值 |
---|---|---|---|---|
sCheckedGroup | Array | checkbox的数组选项 | [] | [] |
disabled | Boolean | 禁用 | true,false | false |
Events
事件说明
属性 | 类型 | 参数说明 | 参数 | 默认值 |
---|---|---|---|---|
change | Events | radio值 | tvale |
最后
以上就是糟糕星星为你收集整理的vue封装checkbox 组件的全部内容,希望文章能够帮你解决vue封装checkbox 组件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复