uniapp 异步加载级联选择器(Cascader,data-picke)

 

目录

Props

事件方法

inputChange事件回调参数说明:

completeChange事件回调参数说明:

temList 属性Object参数说明

defaultItemList 属性Object参数说明

在template中使用


由于uniapp uni-ui的data-picke 不支持异步作者自己写了一个 插件市场下载使用

插件市场地址级联数据选择 data-picker 自定义多级选择 多级联动选择、 - DCloud 插件市场

 

Props

属性名类型说明默认值
readonlyBoolean只读 |false
borderBoolean边框 | true
clearIconBoolean清除按钮 | true
placeholderString默认提示 |请选择
popupTitleString弹窗标题 |请选择
itemListArray级联数据, 如果下一级是请求返回,则为第一级数据,否则为所有数据[ ]
defaultItemListArray初始化默认选中数据,当一次性传入所有数据时,默认值可为字符串数组,如:['安徽省','阜阳市','颍上县'][ ]
defaultKeyV1.7.2+ String默认值字段key,可传值:text,value,仅当一次性传入所有数据时有效text
headerLineBoolean是否显示header底部细线true
headerBgColorStringheader背景颜色#FFFFFF
tabsHeightString顶部标签栏高度88rpx
textString默认显示文字请选择
sizeNumbertabs 文字大小28
colorStringtabs 文字颜色#555
activeColorString选中颜色#5677fc
boldBoolean选中后文字加粗true
showLineBoolean选中后是否显示底部线条true
lineColorString线条颜色#5677fc
checkMarkSizeNumbericon 大小15
checkMarkColorStringicon 颜色#5677fc
imgWidthStringitem 图片宽度40rpx
imgHeightStringitem 图片高度40rpx
radiusString图片圆角50%
textColorStringitem text颜色#333
textActiveColorStringitem text选中后颜色#333
textBoldBoolean选中后字体是否加粗true
textSizeNumberitem text字体大小28
nowrapBooleantext 是否不换行false
subTextColorStringitem subText颜色#999
subTextSizeNumberitem subText字体大小24
paddingStringitem padding20rpx 30rpx
firstItemTopString占位高度,第一条数据距离顶部距离20rpx
heightStringswiper 高度300px
backgroundColorStringitem swiper 内容部分背景颜色#FFFFFF
requestBoolean子级数据是否请求返回(默认false,一次性返回所有数据)false
receiveDataArray子级数据(当有改变时,默认为当前选中项新增子级数据,request为true时生效)[ ]
reset[Number, String]改变reset值则重置所有数据

事件方法

属性类型说明返回值
popupopenedEvents弹框打开时触发
popupclosedEvents弹框关闭时触发
completeChangeEvents选择器中item项点击时触发
inputChangeEvents选择结果数据

inputChange事件回调参数说明:

  • layer 当前所属层级
  • subIndex 当前层级点击项索引值
  • subItem项 当前层级点击项所有数据,由父组件传入的数据

completeChange事件回调参数说明:

  • result 当前选择的结果
  • text 所有层级选择的text值拼接数据,如:安徽省合肥市庐阳区
  • value 最后一级点击项的value值
  • subText 最后一级点击项的text值
  • src 最后一级点击项的src值

temList 属性Object参数说明

属性 receiveData 数据格式与 itemList中子集数据一致,数据为约定格式,尽量保持一致。

[{
    src: "", //图标地址
    text: "",//主文本
    subText: "",//副文本
    value: 0, //value值 
    children:[{
      text: "",//主文本
      subText: "",//副文本
      value: 0,//value值
      children:[] //子级数据 如果数据长度为0则表示没有下一级数据了
     }] //子级数据
}]

defaultItemList 属性Object参数说明

数据为约定格式,尽量保持一致,当一次性传入所有数据时,默认值可为字符串数组。

[{
    text: "", //选中的text
    subText: '', //选中的subText
    value: '', //选中的value
    src: '', //选中的src,没有则传空或不传
    index: 0, //选中数据在当前layer索引
    list: [{
        src: "",//图标地址
        text: "", //主文本
        subText: "",//副文本
        value: 101 //value值 
     }] //当前layer下所有数据集合
}]

在template中使用


<template>
    <view>
        <jia-cascader request :itemList="itemList" :receiveData="receiveData" :defaultItemList="defaultItemList" @completeChange="complete" @inputChange="change"></jia-cascader>
    </view>
</template>

<script>
// data 数据 及 方法
export default {
    data() {
        return {
            itemList: [],
            receiveData: [],
            defaultItemList: [
                {
                    src: '',
                    text: '高一(3)班',
                    subText: '30人',
                    value: 102,
                    index: 1, //选中数据在当前layer索引
                    list: [
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(3)班',
                            subText: '30人',
                            value: 103
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        },
                        {
                            src: '',
                            text: '高一(2)班',
                            subText: '30人',
                            value: 102
                        },
                        {
                            src: '',
                            text: '高一(1)班',
                            subText: '30人',
                            value: 101
                        }
                    ] //当前layer下所有数据集合
                },
                {
                    text: '周小小', //选中的text
                    subText: '女', //选中的subText
                    value: 11103, //选中的value
                    src: '', //选中的src,没有则传空或不传
                    index: 2, //选中数据在当前layer索引
                    list: [
                        {
                            text: '张三',
                            subText: '男',
                            value: 11101
                        },
                        {
                            text: '王五',
                            subText: '男',
                            value: 11102
                        },
                        {
                            text: '周小小',
                            subText: '女',
                            value: 11103
                        },
                        {
                            text: '周小小',
                            subText: '女',
                            value: 11103
                        },
                        {
                            text: '周小小',
                            subText: '女',
                            value: 11103
                        }
                    ] //当前layer下所有数据集合
                }
            ]
        };
    },
    onLoad() {
        this.itemList = [
            {
                src: ' ',
                text: '高一(1)班',
                subText: '30人',
                value: 101
            },
            {
                src: ' ',
                text: '高一(2)班',
                subText: '30人',
                value: 102
            },
            {
                src: ' ',
                text: '高一(3)班',
                subText: '30人',
                value: 103
            },
            {
                src: ' ',
                text: '高一(4)班',
                subText: '28人',
                value: 104
            },
            {
                src: ' ',
                text: '高一(5)班',
                subText: '28人',
                value: 105
            },
            {
                src: ' ',
                text: '高一(6)班',
                subText: '28人',
                value: 106
            },
            {
                src: ' ',
                text: '高一(7)班',
                subText: '28人',
                value: 107
            },
            {
                src: ' ',
                text: '高一(8)班',
                subText: '38人',
                value: 108
            },
            {
                src: ' ',
                text: '高一(9)班',
                subText: '38人',
                value: 109
            },
            {
                src: ' ',
                text: '高一(10)班',
                subText: '38人',
                value: 110
            },
            {
                src: ' ',
                text: '高一(11)班',
                subText: '38人',
                value: 111
            },
            {
                src: ' ',
                text: '高一(12)班',
                subText: '38人',
                value: 112
            }
        ];
    },
    methods: {
        change(e) {
            console.log(e);
            /**
         *   layer: 0  第几级 index
             src: '/static/images/basic/color.png'
             subIndex: 2   //当前层级下选中项index
             subText: '30人'  //选中项数据
             text: '高一(3)班'
             value: 103 //选中项value数据
         * */

            // 模拟请求
            let value = e.value;
            let layer = e.layer;
            if (layer === 7) {
                //实际中以请求数据为准,无下级数据则传空数组
                this.receiveData = [];
            } else {
                uni.showLoading({
                    title: '请稍候...'
                });
                setTimeout(() => {
                    uni.hideLoading();
                    //请求完成后将数据处理成以下格式,传入,最后一级没有则传空数组
                    switch (layer) {
                        case 0:
                            this.receiveData = [
                                {
                                    text: '张三',
                                    subText: '男',
                                    value: 11101
                                },
                                {
                                    text: '王五',
                                    subText: '男',
                                    value: 11102
                                },
                                {
                                    text: '周小小',
                                    subText: '女',
                                    value: 11103
                                },
                                {
                                    text: '周小小',
                                    subText: '女',
                                    value: 11103
                                },
                                {
                                    text: '周小小',
                                    subText: '女',
                                    value: 11103
                                }
                            ];
                            break;
                        case 1:
                            this.receiveData = [
                                {
                                    text: '他(她)说',
                                    value: 11101
                                }
                            ];
                            break;
                        case 2:
                            this.receiveData = [
                                {
                                    text: '这是一个',
                                    value: 11101
                                }
                            ];
                            break;
                        case 3:
                            this.receiveData = [
                                {
                                    text: '级联选择器',
                                    value: 11101
                                }
                            ];
                            break;
                        case 4:
                            this.receiveData = [
                                {
                                    text: '测试例子',
                                    value: 11101
                                }
                            ];
                            break;
                        case 5:
                            this.receiveData = [
                                {
                                    text: '总共',
                                    value: 11101
                                }
                            ];
                            break;
                        case 6:
                            this.receiveData = [
                                {
                                    text: '8级数据',
                                    value: 11101
                                }
                            ];
                            break;
                        default:
                            break;
                    }
                }, 800);
            }
        },
        complete(e) {
            console.log(e);
            console.log('您选择的数据为:' + e.text);
        }
    }
};
</script>
  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值