点击我查看效果
【又在重复造轮子!!!】vue有很多现成的UI框架,博主的手机端用的是mintUI,但是mintUI样式不能整改为想要的样子,因此纯手工封装了一个checkBox组件(纯css实现效果,需要不一样的可自制样式)
先来一个效果图:
// js数据
data: function () {
return {
multiCheckOptions: [
{'value': '1', 'name': '选项1'},
{'value': '2','name': '选项2(禁用)','disabled': true},
{'value': '3', 'name': '选项3'}],
checkedVal1: [1],
checkedVal2: [1, 2],
checkedVal3: [1, 2],
}
}
3.1、参数说明(参数命名最好不要使用大写,有可能会解析不到):
3.2、核心代码:
model: { // v-model 对应的变量和事件,默认是value和change
prop: 'checked',
event: 'change'
},
tips:可能会有小伙伴觉得,我不用checkedVal:this.checked都可以,只需要直接在checkBox
checkedVal: this.checked, // data中定义一个新的变量,用来存储选中的数据,保证单向数据流的统一性
this.$emit('change', newValue) // 监听数据变化,回传数据到父组件
有这三句话,组件就已经成功了一半,接下来只需要把他们放到合适的位置,就可以初见成效。
3.3 、准备js代码
export default {
name: "multi-check-list",
model: { // v-model 对应的变量和事件,默认是value和change
prop: 'checked',
event: 'change'
},
props: { // 组件参数
label: String,
options: Array,
checked: Array,
disabled: false,
showbox: {
type: Boolean,
default: true
},
},
watch: { // 监听数据变化,回传数据到父组件
checkedVal(newValue, oldValue) {
if (newValue != oldValue) {
this.$emit('change', newValue)
}
}
},
data() {
return {
checkedVal: this.checked, // 用来存储选中的数据
curTime: new Date().getTime(), // 获取当前时间,生成唯一id,保证一个页面可使用多个组件
}
},
}
可能会有小伙伴不明白,为什么要checkedVal:this.checked?!?
答:
3.4 、编写html代码
遍历传入的options,动态生成CheckBox列表
到这里,组件封装就基本成型了,没有贴出css,如果需要完整代码,可直接在本人github上clone代码,或者在本人资源里面下载
感谢观看,欢迎留言交流!