跳到主要内容
Cascader
级联组件通常由多个层次性联动的下拉列表组成,并支持用户进行数据筛选和选择,用于在多个层级的选项中进行选择,例如省市区选择。

示例

基础用法

PCPhonePad
<page>
<module title="无默认值">
<form
x="form"
layout="horizontal">
<item
label="单选"
name="a"
node="cascader"
data="{{data}}"
bind-changed="handleHChanged"
/>
<item
label="多选"
name="b"
node="cascader"
multiple
data="{{data}}"
bind-changed="handleHChanged"
/>
</form>

</module>

<module title="有默认值">
<form
x="form"
layout="horizontal">
<item
label="单选"
name="a"
node="cascader"
data="{{data}}"
value="{{value}}"
bind-changed="handleHChanged"
/>
<item
label="多选"
name="b"
node="cascader"
multiple
data="{{data}}"
value="{{multipleValue}}"
bind-changed="handleHChanged"
/>
</form>
</module>

<module title="超过13条自动显示搜索框" subtitle="条数是按枝干计算得到的,不是整条完整路径">
<form
x="form"
layout="horizontal">
<item
label="单选"
name="a"
node="cascader"
data="{{lists}}"
value="{{value}}"
bind-changed="handleHChanged"
/>
<item
label="多选"
name="b"
node="cascader"
multiple
data="{{lists}}"
value="{{multipleValue}}"
bind-changed="handleHChanged"
/>
</form>
</module>
</page>

const data = [
{
label: '指南',
value: 'zhinan',
children: [
{
value: 'yizhi',
label: '一致',
},
{
value: 'fankui',
disabled: true,
label: '反馈',
},
{
value: 'xiaolv',
label: '效率',
},
{
value: 'kekong',
label: '可控',
},
],
},
{
value: 'zujian',
label: '组件',
children: [
{
value: 'layout',
label: 'Layout 布局',
},
{
value: 'color',
label: 'Color 色彩',
},
{
value: 'typography',
label: 'Typography 字体',
disabled: true,
},
{
value: 'icon',
label: 'Icon 图标',
},
{
value: 'button',
label: 'Button 按钮',
},
],
},
];

const lists=[];
for(let i=0;i<20;++i){
lists.push({
value:`${i}`,
label:`label${i}`,
children:[
{
value:`${i}-${i}`,
label:`label${i}-${i}`,
}
]
});
}

export default XPage({
data: {
data,
value:['zhinan', 'yizhi'],
multipleValue: [['zhinan', 'yizhi'], ['zujian', 'layout']],
lists,
},

show() {
},

handleHChanged(node) {
console.info('node', node);
},
});


选择任意层级

父级和子级节点都是独立的可选项。

PCPhonePad
<page>
<module title="可选任意层级">
<form
x="form"
layout="horizontal">
<item
label="单选,可选择任意层级"
name="d"
node="cascader"
branch-selectable
colspan="{{3}}"
data="{{data}}"
/>
<item
multiple
branch-selectable
label="多选,可选择任意层级"
name="e"
node="cascader"
selectBtn="{{true}}"
colspan="{{3}}"
data="{{data}}"
/>
</form>
</module>
<module title="可选任意层级,末级节点仅可以选择单个节点">
<form
x="form"
layout="horizontal">
<item
multiple
branch-selectable
label="多选,可选择任意层级(末级节点仅可以选择单个节点)"
name="e"
node="cascader"
selectBtn="{{true}}"
colspan="{{3}}"
data="{{data}}"
onlyOneLeafCanBeSelected
/>
</form>
</module>
</page>

const data = [
{
label: '指南',
value: 'zhinan',
children: [
{
value: 'yizhi',
label: '一致',
},
{
value: 'fankui',
disabled: true,
label: '反馈',
},
{
value: 'xiaolv',
label: '效率',
},
{
value: 'kekong',
label: '可控',
},
],
},
{
value: 'zujian',
label: '组件',
children: [
{
value: 'layout',
label: 'Layout 布局',
},
{
value: 'color',
label: 'Color 色彩',
},
{
value: 'typography',
label: 'Typography 字体',
disabled: true,
},
{
value: 'icon',
label: 'Icon 图标',
},
{
value: 'button',
label: 'Button 按钮',
},
],
},
];

export default XPage({
data: {
data,
value:['zhinan', 'yizhi'],
multipleValue: [['zhinan', 'yizhi'], ['zujian', 'layout']],
},

show() {
},
});


远程获取数据,远程搜索

PCPhonePad

<page>
<form
x="form"
layout="horizontal">

<item
label="远程获取数据"
name="h"
node="cascader"
placeholder="直接配置URL即可"
ajax="{{ajax}}"
colspan="{{3}}"
multiple
before-render="{{beforeCascaderRender}}"
bindchanged="handleHChanged"
/>
<item
label="远程获取数据 + LazyLoad"
name="g"
node="cascader"
lazy
lazyLoad="{{cascaderLazyLoad}}"
colspan="{{3}}"
/>

<item
label="远程搜索示例"
name="c"
node="cascader"
remote-searchable
colspan="{{3}}"
ajax="{{ajax}}"
before-render="{{beforeCascaderRender}}"
/>

</form>
</page>


const traverseNodes = (nodes) => {
return nodes.map(({ aggCode, aggName, leaf, childList }) => {
const node = {
label: aggName,
value: aggCode,
leaf, // 标识节点是否为叶子节点,lazyLoad时可标识该节点是否包含子节点
};

if (childList && childList.length) {
node.children = traverseNodes(childList);
}

return node;
});
};

export default XPage({
data: {
ajax: {
url: '//testapi-nodedmallos.dmall.com/cabinx/pcapi/table/children',
},
},

show() {
// 给lazyload cascader赋值;或在dml文件内,直接设置value属性<item value="{['AH01', 'Z25', 'Z25-1']}" />
this.getComponent('form').setData({
g: ['AH01', 'Z25', 'Z25-1'],
});
},

beforeCascaderRender(res) {
const {
data: { result },
} = res;

/*
返回的结构
{ data: Array<{ label: String, value: any, children: Array }>}
*/
return {
data: traverseNodes(result),
};
},

cascaderLazyLoad(node, callback) {
// 首次加载parentId可不传
const { value: parentId } = node || {};

return CabinX.ajax({
url: '//testapi-nodedmallos.dmall.com/cabinx/pcapi/table/children/lazy',
method: 'get',
params: { parentId },
}).then((res) => {
const {
data: { result },
} = res;
const nodes = traverseNodes(result);

callback(nodes);
});
},

handleHChanged(node) {
console.info('node', node);
},
});



Attributes

属性说明类型可选值默认值版本
name名称String----PC/Mobile--
value绑定值String / Number / Array----PC/Mobile--
data选项Array<{label, value}>----PC/Mobile--
ajax请求相关String/Object<{url, params, initData}>/Promise----PC/Mobile--
remoteSearchable远程搜索Boolean--falsePC/Mobile--
branchSelectable枝干可选Boolean--falsePC/Mobile--
multiple多选Boolean--falsePC/Mobile--
onlyOneLeafCanBeSelected多选开启时末级节点仅单选Boolean--falsePC--
disabled禁用Boolean--falsePC/Mobile--
placeholder占位符String----PC/Mobile--
collapseTags是否合并多选 效果Boolean--falsePC/Mobile--
loaded请求处理完成后的回调Function----PC/Mobile--
lazy懒加载Boolean--falsePC/Mobile--
lazyLoad加载动态数据的方法Function(node, resolve)----PC/Mobile--
beforeChange改变前钩子函数Function(newValue: any, oldValue: any): Boolean/Promise----PC/Mobile--
separators搜索关键词过滤分隔符连接符Boolean / Arrayfalse--PC--
beforeRequest在请求之前对参数进行操作,如果返回 false ,则阻止请求发送(可用于校验和控制请求频率)false/ObjectPC--
beforeRender渲染前数据过滤,须返回对应数据Function----
filter自定义搜索方法Function(searchValue: String, item: { label: String, value: any }): Boolean----PC--
selectBtn全选和反选Boolean----PC/Mobile--
panelSelectBtnpanel级全选Boolean----Mobile--
lazyFillBack动态加载数据回显数据时需要补全的node节点信息Array--[]PC--
clearable可清空Boolean--falsePC/Mobile--
virtualScroll虚拟滚动Boolean--falsePC/Mobile--
checkAllJustParentValue当子节点全部选中时,父节点也是选中,仅返回父级valueBoolean--falsePC--

Events

名称说明回调参数版本
changed值改变后触发(value)PC/Mobile--