vue3+Elament Plus开发:Element Plus多选框 TypeScript 下报错修复
问题描述
Element Plus 的多选框,根据官方文档的示例,在 ts 模式下是无法运行的;
既然用了VUE3,那我们就用VUE3的写法改写下。
官方代码示例
<template>
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
<div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
<el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
</el-checkbox-group>
</template>
<script>
const cityOptions = ['上海', '北京', '广州', '深圳'];
export default {
data() {
return {
checkAll: false,
checkedCities: ['上海', '北京'],
cities: cityOptions,
isIndeterminate: true
};
},
methods: {
handleCheckAllChange(val) {
this.checkedCities = val ? cityOptions : [];
this.isIndeterminate = false;
},
handleCheckedCitiesChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.cities.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
}
}
};
</script>
改写后的代码示例
默认全选:
<template>
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
<div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
<el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
</el-checkbox-group>
</template>
<script lang="ts">
import { ref, reactive, toRefs } from 'vue'
const cityOptions = ['上海', '北京', '广州', '深圳'];
export default {
setup () {
const data = reactive({
checkAll: true,
checkedCities: cityOptions,
cities: cityOptions,
isIndeterminate: false,
handleCheckAllChange: (val: boolean) => {
data.checkedCities = val ? cityOptions : []
data.isIndeterminate = false
},
handleCheckedTagsChange (value: string) {
const checkedCount = value.length
data.checkAll = checkedCount === data.cities.length
data.isIndeterminate = checkedCount > 0 && checkedCount < data.cities.length
}
})
const refData = toRefs(data)
return {
...refData
}
}
};
</script>