# Conflicts: # pages/views/shengchan/ribaoshuju/rbsjLsxq.vue # pages/views/shengchan/ribaoshuju/trqRbsj.vue # uni_modules/cxc-szcx-dateRangeSelect/components/cxc-szcx-dateRangeSelect/cxc-szcx-dateRangeSelect.vue |
||
|---|---|---|
| .. | ||
| components/cxc-szcx-dictSelect | ||
| changelog.md | ||
| package.json | ||
| readme.md | ||
cxc-szcx-dictSelect
组件说明:uni-data-checkbox 多选字典项选择组件
一、组件概述
该组件基于 Vue 3 和 uni-data-checkbox 实现了一个多选的字典项选择器。它通过传入字典编码(dictCode)从后端接口获取字典项数据,并将其展示为多选框列表。组件支持双向数据绑定,可将选中的值同步给父组件,同时在选中值发生变化时触发 change 事件。
二、组件使用的技术栈
- 框架:Vue 3(使用组合式 API)
- UI 组件:
uni-data-checkbox(用于展示多选框列表) - 请求库:假设使用了自定义的
getDictItemsApi函数进行后端数据请求
三、组件输入(Props)
| 属性名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
dictCode |
String | 是 | 无 | 用于从后端获取字典项数据的字典编码 |
modelValue |
String | 否 | '' | 双向绑定的选中值,多个值以逗号分隔 |
四、组件输出(Emits)
| 事件名 | 说明 | 参数 |
|---|---|---|
update:modelValue |
当选中值发生变化时,用于更新父组件的 modelValue |
选中值的字符串,多个值以逗号分隔 |
change |
当选中值发生变化时触发 | 选中值的字符串,多个值以逗号分隔 |
五、组件内部数据
| 变量名 | 类型 | 说明 |
|---|---|---|
dictItems |
Ref | 存储从后端获取的字典项数据 |
selectedValuesArray |
Ref | 存储当前选中的值,以数组形式存储 |
六、组件方法
1. loadDictItems
- 功能:异步从后端接口获取字典项数据,并将其赋值给
dictItems。 - 实现逻辑:
- 调用
getDictItemsApi函数,传入props.dictCode进行数据请求。 - 若请求成功,将响应数据的
result字段赋值给dictItems.value。 - 若请求失败,在控制台输出错误信息。
- 调用
2. 监听 selectedValuesArray 的变化
- 功能:当
selectedValuesArray发生变化时,将选中的值转换为字符串,并触发update:modelValue和change事件通知父组件。 - 实现逻辑:
- 使用
watch函数监听selectedValuesArray的变化。 - 当变化发生时,将新的选中值数组使用
join(',')方法转换为字符串。 - 触发
update:modelValue和change事件,将转换后的字符串作为参数传递。
- 使用
3. 监听 props.modelValue 的变化
- 功能:当父组件传递的
modelValue发生变化时,更新selectedValuesArray。 - 实现逻辑:
- 使用
watch函数监听props.modelValue的变化。 - 当变化发生时,将新的
modelValue使用split(',')方法转换为数组,并赋值给selectedValuesArray.value。 immediate: true表示在组件初始化时就会执行一次监听回调,确保初始值能正确同步。
- 使用
七、组件生命周期钩子
onMounted
- 功能:在组件挂载后调用
loadDictItems函数,从后端获取字典项数据。
八、使用示例
<template>
<div>
<MyDictCheckbox
:dictCode="myDictCode"
v-model="selectedValues"
@change="handleChange"
/>
<p>当前选中的值: {{ selectedValues }}</p>
</div>
</template>
<script setup>
import { ref } from 'vue';
import MyDictCheckbox from './MyDictCheckbox.vue';
const myDictCode = 'exampleDictCode';
const selectedValues = ref('');
const handleChange = (newValue) => {
console.log('选中值发生变化:', newValue);
};
</script>
九、注意事项
- 确保
getDictItemsApi函数能正确获取后端数据,且响应数据的格式符合{ result: [...] }。 - 若
modelValue初始值为空字符串,selectedValuesArray会初始化为空数组。 - 由于使用了
watch的deep: true选项,在selectedValuesArray内部元素发生变化时也会触发监听回调,可能会影响性能,需注意。