百度智能小程序 級(jí)聯(lián)組件

2020-09-03 16:20 更新

cascade 級(jí)聯(lián)組件

解釋:多級(jí)選擇組件,為開(kāi)發(fā)者提供級(jí)聯(lián)選擇功能,默認(rèn)為三級(jí)。比如:省/市/區(qū)。該組件包括左側(cè)標(biāo)簽欄,以及右側(cè)多個(gè) picker(從底部彈起的滾動(dòng)選擇器)。支持配置左側(cè)標(biāo)簽寬度,并提供自定義樣式,可供開(kāi)發(fā)者進(jìn)行定制。

屬性說(shuō)明

屬性名 類型 必填 默認(rèn)值 說(shuō)明

range

Array

[]

多級(jí) picker 的內(nèi)容數(shù)組,需要傳入二維數(shù)組,格式為[[],[],[]]

range-key

String

當(dāng) range 中的一維數(shù)組為[{ range-key : value }]時(shí), range-key 對(duì)應(yīng)的 value 為選擇器顯示的內(nèi)容

label-width

String

4em

左側(cè)文字寬度,須包含單位,例如 em 、 px 、 rpx 、 vw 、 vh ... 默認(rèn)為 4 字寬度 4em ( 72px ),6 字寬度為 6em ,建議用 em,可以適配

label

String

左側(cè)文字描述

placeholder

Array

[]

picker 沒(méi)值時(shí)默認(rèn)顯示

value

Array

[]

picker 選中時(shí)的數(shù)組下標(biāo)

change-label-color

Boolean

false

是否需要更改組件左側(cè)標(biāo)簽的顏色

label-color

String

#c40311

change-lable-color 為 true 時(shí)的顏色值

disabled

Boolean

false

未選擇第一/二級(jí) picker ,而直接選擇其余 picker 時(shí),是否展示禁用

tips

Array

[]

未按順序選擇第一、二、三級(jí) picker 時(shí),分別彈出tips[0]、tips[1]的提示

noborder

Boolean

false

整個(gè)組件外側(cè)是否有下邊框線

change

EventHandle

每一級(jí) picker 選擇時(shí),觸發(fā) change 事件

cascade-picker

String

級(jí)聯(lián)組件的外部樣式類,可用于修改組件最外層樣式

cascade-label

String

級(jí)聯(lián)組件的外部樣式類,可用于修改組件左側(cè)標(biāo)簽樣式

cascade-content

String

級(jí)聯(lián)組件的外部樣式類,可用于修改組件右側(cè)單行 picker 的樣式

cascade-picker-content

String

級(jí)聯(lián)組件的外部樣式類,可用于修改 picker 內(nèi)容展示樣式

示例 

在開(kāi)發(fā)者工具中打開(kāi)


代碼示例

<!--四字標(biāo)題-->
<smt-cascade
    range="{{multiArray1}}"
    label="四字標(biāo)題"
    range-key="name"
    bind:change="change"
    placeholder="{{['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)']}}"
></smt-cascade>
<!--配置無(wú)下邊框-->
<smt-cascade
    range="{{multiArray2}}"
    label="無(wú)下邊框""
    range-key="name"
    noborder="true"
    bind:change="change"
></smt-cascade>
<!--配置label-width-->
<smt-cascade
    range="{{multiArray3}}"
    label="六字標(biāo)題排版"
    range-key="name"
    label-width="6em"
    bind:change="change"
    placeholder="{{['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)']}}"
></smt-cascade>
<!--配置tips-->
<smt-cascade
    range="{{multiArray4}}"
    label="配置未點(diǎn)擊時(shí)提示"
    range-key="name"
    bind:change="change"
    tips="{{['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)']}}"
></smt-cascade>
<!--配置回填數(shù)據(jù)-->
<smt-cascade
    range="{{multiArray5}}"
    label="回填"
    value="{{[1, 2, 1]}}"
    range-key="name"
    bind:change="change"
    placeholder="{{['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)']}}"
></smt-cascade>
<!--配置禁用-->
<smt-cascade
    range="{{multiArray6}}"
    label="禁用型"
    range-key="name"
    disabled
    bind:change="change"
    placeholder="{{['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)']}}"
></smt-cascade>
<!--外部樣式類-->
<smt-cascade
    range="{{multiArray7}}"
    label="externalClasses"
    cascade-picker="cascade-picker"
    cascade-label="cascade-label"
    cascade-content="cascade-content"
    cascade-picker-content="cascade-picker-content"
    range-key="name"
    bind:change="change"
    placeholder="{{['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)']}}"
></smt-cascade>
// 初始化級(jí)聯(lián)組件數(shù)組內(nèi)容
const initMultiArray = [
    [
        {
            name: '北京市',
            value: 1
        },
        {
            name: '山西省',
            value: 2
        },
        {
            name: '黑龍江省',
            value: 3
        }
    ],
    [],
    []
];
// 整個(gè)級(jí)聯(lián)組件數(shù)組內(nèi)容
const multiArray = [
    {
        name: '北京市',
        value: 1,
        children: [{
            name: '北京市',
            value: 1,
            children: [{
                name: '海淀區(qū)',
                value: 1
            }, {
                name: '大興區(qū)',
                value: 2
            }, {
                name: '朝陽(yáng)區(qū)',
                value: 3
            }]
        }]
    },
    {
        name: '山西省',
        value: 2,
        children: [{
            name: '太原市',
            value: 1,
            children: [
                {
                    name: '小店區(qū)',
                    value: 1
                }, {
                    name: '迎澤區(qū)',
                    value: 2
                }, {
                    name: '杏花嶺區(qū)',
                    value: 3
                }
            ]
        }, {
            name: '大同市',
            value: 2,
            children: [{
                name: '南郊區(qū)',
                value: 1
            }, {
                name: '新榮區(qū)',
                value: 2
            }, {
                name: '陽(yáng)高區(qū)',
                value: 3
            }]
        }, {
            name: '呂梁市',
            value: 3,
            children: [{
                name: '孝義市',
                value: 1
            }, {
                name: '離石市',
                value: 2
            }, {
                name: '汾陽(yáng)市',
                value: 3
            }]
        }]
    },
    {
        name: '黑龍江省',
        value: 3,
        children: [{
            name: '哈爾濱市',
            value: 1,
            children: [{
                name: '道里區(qū)',
                value: 1
            }, {
                name: '南崗區(qū)',
                value: 2
            }, {
                name: '太平區(qū)',
                value: 3
            }]
        }, {
            name: '齊齊哈爾市',
            value: 2,
            children: [{
                name: '龍沙區(qū)',
                value: 1
            }, {
                name: '建華區(qū)',
                value: 2
            }, {
                name: '鐵鋒區(qū)',
                value: 3
            }]
        }, {
            name: '大慶市',
            value: 3,
            children: [{
                name: '龍鳳區(qū)',
                value: 1
            }, {
                name: '紅崗區(qū)',
                value: 2
            }, {
                name: '林甸縣',
                value: 3
            }]
        }]
    }
];
/* global Page, swan */
Page({ // eslint-disable-line
    data: {
        // 級(jí)聯(lián)選擇數(shù)組
        multiArray1: initMultiArray,
        multiArray2: initMultiArray,
        multiArray3: initMultiArray,
        multiArray4: initMultiArray,
        multiArray6: initMultiArray,
        multiArray7: initMultiArray,
        // 回填數(shù)據(jù)
        multiArray5: [
            [{
                name: '山西省',
                value: 1
            }],
            [{
                name: '太原市',
                value: 1
            }, {
                name: '大同市',
                value: 2
            }, {
                name: '呂梁市',
                value: 3
            }],
            [{
                name: '小店區(qū)',
                value: 1
            }, {
                name: '迎澤區(qū)',
                value: 2
            }, {
                name: '杏花嶺區(qū)',
                value: 3
            }]
        ],
        // 占位文案
        placeholder: ['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)'],
        // 提示文案
        tips: ['請(qǐng)選擇省', '請(qǐng)選擇市', '請(qǐng)選擇區(qū)'],
        // 是否更改label顏色
        changeLabelColor: true,
        // 需要更改的顏色,配合changeLabelColor: true使用
        labelColor1: '#2772fb',
        labelColor2: '#f7534f'
    },

    /**
    * 動(dòng)態(tài)設(shè)置當(dāng)前點(diǎn)擊的是第幾個(gè)級(jí)聯(lián)組件
    *
    * @param {Object} event 點(diǎn)擊對(duì)象
    */
    bindtap(event) {
        const index = event.currentTarget.dataset.index;
        this.setData({
            currentIndex: index
        });
    },

    /**
    * value 改變時(shí)觸發(fā) change 事件
    *
    * @param {Object} event picker選擇對(duì)象
    */
    change(event) {
        const value = event.detail.value;
        const length = value.length;
        if (length > 2) {
            return;
        }
        // 記錄是第幾個(gè)cascade
        const index = this.data.currentIndex;
        const multiArrayKey = `multiArray${[index]}`;
        let multiArrayData = this.data[`multiArray${[index]}`];
        const subArray = multiArray[value[0]].children;
        swan.showLoading({
            title: '正在加載...',
            mask: true
        });
        // 500ms之后,隱藏loading提示,同時(shí)更新級(jí)聯(lián)數(shù)據(jù)
        setTimeout(() => {
            swan.hideLoading();
            multiArrayData[length] = length === 1 ? subArray : subArray[value[1]].children;
            this.setData(multiArrayKey, multiArrayData);
        }, 500);
    }
});
/* 外部樣式類 */
.cascade-label,
.cascade-picker-content  {
    color: #6495ed;
}
{
    "usingComponents": {
        "smt-cascade": "@smt-ui/component/src/cascade"
    }
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)