mirror of https://github.com/ElemeFE/element
1427 lines
39 KiB
Markdown
1427 lines
39 KiB
Markdown
## Cascader
|
|
|
|
Si las opciones tienen una estructura jerárquica clara, Cascader puede utilizarse para visualizarlas y seleccionarlas.
|
|
|
|
### Uso básico
|
|
|
|
Existen dos maneras de expandir los elementos hijo de la opción.
|
|
|
|
:::demo Al asignar al atributo `options` un array de opciones, se genera un Cascader. El atributo `expand-trigger` define cómo se expanden las opciones hijo. Este ejemplo también muestra el evento `change` , cuyo parámetro es el valor de Cascader, un array formado por los valores de cada nivel seleccionado.
|
|
|
|
```html
|
|
<div class="block">
|
|
<span class="demonstration">Child options expand when clicked (default)</span>
|
|
<el-cascader
|
|
:options="options"
|
|
v-model="selectedOptions"
|
|
@change="handleChange">
|
|
</el-cascader>
|
|
</div>
|
|
<div class="block">
|
|
<span class="demonstration">Child options expand when hovered</span>
|
|
<el-cascader
|
|
expand-trigger="hover"
|
|
:options="options"
|
|
v-model="selectedOptions2"
|
|
@change="handleChange">
|
|
</el-cascader>
|
|
</div>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
options: [{
|
|
value: 'guide',
|
|
label: 'Guide',
|
|
children: [{
|
|
value: 'disciplines',
|
|
label: 'Disciplines',
|
|
children: [{
|
|
value: 'consistency',
|
|
label: 'Consistency'
|
|
}, {
|
|
value: 'feedback',
|
|
label: 'Feedback'
|
|
}, {
|
|
value: 'efficiency',
|
|
label: 'Efficiency'
|
|
}, {
|
|
value: 'controllability',
|
|
label: 'Controllability'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'side nav',
|
|
label: 'Side Navigation'
|
|
}, {
|
|
value: 'top nav',
|
|
label: 'Top Navigation'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'component',
|
|
label: 'Component',
|
|
children: [{
|
|
value: 'basic',
|
|
label: 'Basic',
|
|
children: [{
|
|
value: 'layout',
|
|
label: 'Layout'
|
|
}, {
|
|
value: 'color',
|
|
label: 'Color'
|
|
}, {
|
|
value: 'typography',
|
|
label: 'Typography'
|
|
}, {
|
|
value: 'icon',
|
|
label: 'Icon'
|
|
}, {
|
|
value: 'button',
|
|
label: 'Button'
|
|
}]
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form',
|
|
children: [{
|
|
value: 'radio',
|
|
label: 'Radio'
|
|
}, {
|
|
value: 'checkbox',
|
|
label: 'Checkbox'
|
|
}, {
|
|
value: 'input',
|
|
label: 'Input'
|
|
}, {
|
|
value: 'input-number',
|
|
label: 'InputNumber'
|
|
}, {
|
|
value: 'select',
|
|
label: 'Select'
|
|
}, {
|
|
value: 'cascader',
|
|
label: 'Cascader'
|
|
}, {
|
|
value: 'switch',
|
|
label: 'Switch'
|
|
}, {
|
|
value: 'slider',
|
|
label: 'Slider'
|
|
}, {
|
|
value: 'time-picker',
|
|
label: 'TimePicker'
|
|
}, {
|
|
value: 'date-picker',
|
|
label: 'DatePicker'
|
|
}, {
|
|
value: 'datetime-picker',
|
|
label: 'DateTimePicker'
|
|
}, {
|
|
value: 'upload',
|
|
label: 'Upload'
|
|
}, {
|
|
value: 'rate',
|
|
label: 'Rate'
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form'
|
|
}]
|
|
}, {
|
|
value: 'data',
|
|
label: 'Data',
|
|
children: [{
|
|
value: 'table',
|
|
label: 'Table'
|
|
}, {
|
|
value: 'tag',
|
|
label: 'Tag'
|
|
}, {
|
|
value: 'progress',
|
|
label: 'Progress'
|
|
}, {
|
|
value: 'tree',
|
|
label: 'Tree'
|
|
}, {
|
|
value: 'pagination',
|
|
label: 'Pagination'
|
|
}, {
|
|
value: 'badge',
|
|
label: 'Badge'
|
|
}]
|
|
}, {
|
|
value: 'notice',
|
|
label: 'Notice',
|
|
children: [{
|
|
value: 'alert',
|
|
label: 'Alert'
|
|
}, {
|
|
value: 'loading',
|
|
label: 'Loading'
|
|
}, {
|
|
value: 'message',
|
|
label: 'Message'
|
|
}, {
|
|
value: 'message-box',
|
|
label: 'MessageBox'
|
|
}, {
|
|
value: 'notification',
|
|
label: 'Notification'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'menu',
|
|
label: 'NavMenu'
|
|
}, {
|
|
value: 'tabs',
|
|
label: 'Tabs'
|
|
}, {
|
|
value: 'breadcrumb',
|
|
label: 'Breadcrumb'
|
|
}, {
|
|
value: 'dropdown',
|
|
label: 'Dropdown'
|
|
}, {
|
|
value: 'steps',
|
|
label: 'Steps'
|
|
}]
|
|
}, {
|
|
value: 'others',
|
|
label: 'Others',
|
|
children: [{
|
|
value: 'dialog',
|
|
label: 'Dialog'
|
|
}, {
|
|
value: 'tooltip',
|
|
label: 'Tooltip'
|
|
}, {
|
|
value: 'popover',
|
|
label: 'Popover'
|
|
}, {
|
|
value: 'card',
|
|
label: 'Card'
|
|
}, {
|
|
value: 'carousel',
|
|
label: 'Carousel'
|
|
}, {
|
|
value: 'collapse',
|
|
label: 'Collapse'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'resource',
|
|
label: 'Resource',
|
|
children: [{
|
|
value: 'axure',
|
|
label: 'Axure Components'
|
|
}, {
|
|
value: 'sketch',
|
|
label: 'Sketch Templates'
|
|
}, {
|
|
value: 'docs',
|
|
label: 'Design Documentation'
|
|
}]
|
|
}],
|
|
selectedOptions: [],
|
|
selectedOptions2: []
|
|
};
|
|
},
|
|
methods: {
|
|
handleChange(value) {
|
|
console.log(value);
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Opcion Disabled
|
|
|
|
Para desactivar una opción configure un campo `disabled` en el objeto de opción.
|
|
|
|
:::demo En este ejemplo, el primer elemento del array `options` tiene un campo `disabled: true` , por lo que está desactivado. Por defecto, Cascader verifica el campo `disabled` en cada objeto de opción; si está utilizando otro nombre de campo para indicar si una opción está deshabilitada, puede asignarla en el atributo `props` (consulte la tabla API a continuación para obtener más detalles). Y por supuesto, el valor de `value`, `label` y `children` también se pueden personalizar de la misma manera.
|
|
|
|
```html
|
|
<el-cascader
|
|
:options="optionsWithDisabled"
|
|
></el-cascader>
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
optionsWithDisabled: [{
|
|
value: 'guide',
|
|
label: 'Guide',
|
|
disabled: true,
|
|
children: [{
|
|
value: 'disciplines',
|
|
label: 'Disciplines',
|
|
children: [{
|
|
value: 'consistency',
|
|
label: 'Consistency'
|
|
}, {
|
|
value: 'feedback',
|
|
label: 'Feedback'
|
|
}, {
|
|
value: 'efficiency',
|
|
label: 'Efficiency'
|
|
}, {
|
|
value: 'controllability',
|
|
label: 'Controllability'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'side nav',
|
|
label: 'Side Navigation'
|
|
}, {
|
|
value: 'top nav',
|
|
label: 'Top Navigation'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'component',
|
|
label: 'Component',
|
|
children: [{
|
|
value: 'basic',
|
|
label: 'Basic',
|
|
children: [{
|
|
value: 'layout',
|
|
label: 'Layout'
|
|
}, {
|
|
value: 'color',
|
|
label: 'Color'
|
|
}, {
|
|
value: 'typography',
|
|
label: 'Typography'
|
|
}, {
|
|
value: 'icon',
|
|
label: 'Icon'
|
|
}, {
|
|
value: 'button',
|
|
label: 'Button'
|
|
}]
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form',
|
|
children: [{
|
|
value: 'radio',
|
|
label: 'Radio'
|
|
}, {
|
|
value: 'checkbox',
|
|
label: 'Checkbox'
|
|
}, {
|
|
value: 'input',
|
|
label: 'Input'
|
|
}, {
|
|
value: 'input-number',
|
|
label: 'InputNumber'
|
|
}, {
|
|
value: 'select',
|
|
label: 'Select'
|
|
}, {
|
|
value: 'cascader',
|
|
label: 'Cascader'
|
|
}, {
|
|
value: 'switch',
|
|
label: 'Switch'
|
|
}, {
|
|
value: 'slider',
|
|
label: 'Slider'
|
|
}, {
|
|
value: 'time-picker',
|
|
label: 'TimePicker'
|
|
}, {
|
|
value: 'date-picker',
|
|
label: 'DatePicker'
|
|
}, {
|
|
value: 'datetime-picker',
|
|
label: 'DateTimePicker'
|
|
}, {
|
|
value: 'upload',
|
|
label: 'Upload'
|
|
}, {
|
|
value: 'rate',
|
|
label: 'Rate'
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form'
|
|
}]
|
|
}, {
|
|
value: 'data',
|
|
label: 'Data',
|
|
children: [{
|
|
value: 'table',
|
|
label: 'Table'
|
|
}, {
|
|
value: 'tag',
|
|
label: 'Tag'
|
|
}, {
|
|
value: 'progress',
|
|
label: 'Progress'
|
|
}, {
|
|
value: 'tree',
|
|
label: 'Tree'
|
|
}, {
|
|
value: 'pagination',
|
|
label: 'Pagination'
|
|
}, {
|
|
value: 'badge',
|
|
label: 'Badge'
|
|
}]
|
|
}, {
|
|
value: 'notice',
|
|
label: 'Notice',
|
|
children: [{
|
|
value: 'alert',
|
|
label: 'Alert'
|
|
}, {
|
|
value: 'loading',
|
|
label: 'Loading'
|
|
}, {
|
|
value: 'message',
|
|
label: 'Message'
|
|
}, {
|
|
value: 'message-box',
|
|
label: 'MessageBox'
|
|
}, {
|
|
value: 'notification',
|
|
label: 'Notification'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'menu',
|
|
label: 'NavMenu'
|
|
}, {
|
|
value: 'tabs',
|
|
label: 'Tabs'
|
|
}, {
|
|
value: 'breadcrumb',
|
|
label: 'Breadcrumb'
|
|
}, {
|
|
value: 'dropdown',
|
|
label: 'Dropdown'
|
|
}, {
|
|
value: 'steps',
|
|
label: 'Steps'
|
|
}]
|
|
}, {
|
|
value: 'others',
|
|
label: 'Others',
|
|
children: [{
|
|
value: 'dialog',
|
|
label: 'Dialog'
|
|
}, {
|
|
value: 'tooltip',
|
|
label: 'Tooltip'
|
|
}, {
|
|
value: 'popover',
|
|
label: 'Popover'
|
|
}, {
|
|
value: 'card',
|
|
label: 'Card'
|
|
}, {
|
|
value: 'carousel',
|
|
label: 'Carousel'
|
|
}, {
|
|
value: 'collapse',
|
|
label: 'Collapse'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'resource',
|
|
label: 'Resource',
|
|
children: [{
|
|
value: 'axure',
|
|
label: 'Axure Components'
|
|
}, {
|
|
value: 'sketch',
|
|
label: 'Sketch Templates'
|
|
}, {
|
|
value: 'docs',
|
|
label: 'Design Documentation'
|
|
}]
|
|
}]
|
|
};
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Mostrar sólo el último nivel
|
|
|
|
Puede mostrar sólo el último nivel en lugar de todos los niveles.
|
|
|
|
:::demo El atributo `show-all-levels` define si se visualizan todos los niveles. Si es `false`, sólo se muestra el último nivel.
|
|
|
|
```html
|
|
<el-cascader
|
|
:options="options"
|
|
:show-all-levels="false"
|
|
></el-cascader>
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
options: [{
|
|
value: 'guide',
|
|
label: 'Guide',
|
|
children: [{
|
|
value: 'disciplines',
|
|
label: 'Disciplines',
|
|
children: [{
|
|
value: 'consistency',
|
|
label: 'Consistency'
|
|
}, {
|
|
value: 'feedback',
|
|
label: 'Feedback'
|
|
}, {
|
|
value: 'efficiency',
|
|
label: 'Efficiency'
|
|
}, {
|
|
value: 'controllability',
|
|
label: 'Controllability'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'side nav',
|
|
label: 'Side Navigation'
|
|
}, {
|
|
value: 'top nav',
|
|
label: 'Top Navigation'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'component',
|
|
label: 'Component',
|
|
children: [{
|
|
value: 'basic',
|
|
label: 'Basic',
|
|
children: [{
|
|
value: 'layout',
|
|
label: 'Layout'
|
|
}, {
|
|
value: 'color',
|
|
label: 'Color'
|
|
}, {
|
|
value: 'typography',
|
|
label: 'Typography'
|
|
}, {
|
|
value: 'icon',
|
|
label: 'Icon'
|
|
}, {
|
|
value: 'button',
|
|
label: 'Button'
|
|
}]
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form',
|
|
children: [{
|
|
value: 'radio',
|
|
label: 'Radio'
|
|
}, {
|
|
value: 'checkbox',
|
|
label: 'Checkbox'
|
|
}, {
|
|
value: 'input',
|
|
label: 'Input'
|
|
}, {
|
|
value: 'input-number',
|
|
label: 'InputNumber'
|
|
}, {
|
|
value: 'select',
|
|
label: 'Select'
|
|
}, {
|
|
value: 'cascader',
|
|
label: 'Cascader'
|
|
}, {
|
|
value: 'switch',
|
|
label: 'Switch'
|
|
}, {
|
|
value: 'slider',
|
|
label: 'Slider'
|
|
}, {
|
|
value: 'time-picker',
|
|
label: 'TimePicker'
|
|
}, {
|
|
value: 'date-picker',
|
|
label: 'DatePicker'
|
|
}, {
|
|
value: 'datetime-picker',
|
|
label: 'DateTimePicker'
|
|
}, {
|
|
value: 'upload',
|
|
label: 'Upload'
|
|
}, {
|
|
value: 'rate',
|
|
label: 'Rate'
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form'
|
|
}]
|
|
}, {
|
|
value: 'data',
|
|
label: 'Data',
|
|
children: [{
|
|
value: 'table',
|
|
label: 'Table'
|
|
}, {
|
|
value: 'tag',
|
|
label: 'Tag'
|
|
}, {
|
|
value: 'progress',
|
|
label: 'Progress'
|
|
}, {
|
|
value: 'tree',
|
|
label: 'Tree'
|
|
}, {
|
|
value: 'pagination',
|
|
label: 'Pagination'
|
|
}, {
|
|
value: 'badge',
|
|
label: 'Badge'
|
|
}]
|
|
}, {
|
|
value: 'notice',
|
|
label: 'Notice',
|
|
children: [{
|
|
value: 'alert',
|
|
label: 'Alert'
|
|
}, {
|
|
value: 'loading',
|
|
label: 'Loading'
|
|
}, {
|
|
value: 'message',
|
|
label: 'Message'
|
|
}, {
|
|
value: 'message-box',
|
|
label: 'MessageBox'
|
|
}, {
|
|
value: 'notification',
|
|
label: 'Notification'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'menu',
|
|
label: 'NavMenu'
|
|
}, {
|
|
value: 'tabs',
|
|
label: 'Tabs'
|
|
}, {
|
|
value: 'breadcrumb',
|
|
label: 'Breadcrumb'
|
|
}, {
|
|
value: 'dropdown',
|
|
label: 'Dropdown'
|
|
}, {
|
|
value: 'steps',
|
|
label: 'Steps'
|
|
}]
|
|
}, {
|
|
value: 'others',
|
|
label: 'Others',
|
|
children: [{
|
|
value: 'dialog',
|
|
label: 'Dialog'
|
|
}, {
|
|
value: 'tooltip',
|
|
label: 'Tooltip'
|
|
}, {
|
|
value: 'popover',
|
|
label: 'Popover'
|
|
}, {
|
|
value: 'card',
|
|
label: 'Card'
|
|
}, {
|
|
value: 'carousel',
|
|
label: 'Carousel'
|
|
}, {
|
|
value: 'collapse',
|
|
label: 'Collapse'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'resource',
|
|
label: 'Resource',
|
|
children: [{
|
|
value: 'axure',
|
|
label: 'Axure Components'
|
|
}, {
|
|
value: 'sketch',
|
|
label: 'Sketch Templates'
|
|
}, {
|
|
value: 'docs',
|
|
label: 'Design Documentation'
|
|
}]
|
|
}]
|
|
};
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Con valor por defecto
|
|
|
|
:::demo El valor por defecto se puede definir con un array.
|
|
```html
|
|
<el-cascader
|
|
:options="options"
|
|
v-model="selectedOptions"
|
|
></el-cascader>
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
options: [{
|
|
value: 'guide',
|
|
label: 'Guide',
|
|
children: [{
|
|
value: 'disciplines',
|
|
label: 'Disciplines',
|
|
children: [{
|
|
value: 'consistency',
|
|
label: 'Consistency'
|
|
}, {
|
|
value: 'feedback',
|
|
label: 'Feedback'
|
|
}, {
|
|
value: 'efficiency',
|
|
label: 'Efficiency'
|
|
}, {
|
|
value: 'controllability',
|
|
label: 'Controllability'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'side nav',
|
|
label: 'Side Navigation'
|
|
}, {
|
|
value: 'top nav',
|
|
label: 'Top Navigation'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'component',
|
|
label: 'Component',
|
|
children: [{
|
|
value: 'basic',
|
|
label: 'Basic',
|
|
children: [{
|
|
value: 'layout',
|
|
label: 'Layout'
|
|
}, {
|
|
value: 'color',
|
|
label: 'Color'
|
|
}, {
|
|
value: 'typography',
|
|
label: 'Typography'
|
|
}, {
|
|
value: 'icon',
|
|
label: 'Icon'
|
|
}, {
|
|
value: 'button',
|
|
label: 'Button'
|
|
}]
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form',
|
|
children: [{
|
|
value: 'radio',
|
|
label: 'Radio'
|
|
}, {
|
|
value: 'checkbox',
|
|
label: 'Checkbox'
|
|
}, {
|
|
value: 'input',
|
|
label: 'Input'
|
|
}, {
|
|
value: 'input-number',
|
|
label: 'InputNumber'
|
|
}, {
|
|
value: 'select',
|
|
label: 'Select'
|
|
}, {
|
|
value: 'cascader',
|
|
label: 'Cascader'
|
|
}, {
|
|
value: 'switch',
|
|
label: 'Switch'
|
|
}, {
|
|
value: 'slider',
|
|
label: 'Slider'
|
|
}, {
|
|
value: 'time-picker',
|
|
label: 'TimePicker'
|
|
}, {
|
|
value: 'date-picker',
|
|
label: 'DatePicker'
|
|
}, {
|
|
value: 'datetime-picker',
|
|
label: 'DateTimePicker'
|
|
}, {
|
|
value: 'upload',
|
|
label: 'Upload'
|
|
}, {
|
|
value: 'rate',
|
|
label: 'Rate'
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form'
|
|
}]
|
|
}, {
|
|
value: 'data',
|
|
label: 'Data',
|
|
children: [{
|
|
value: 'table',
|
|
label: 'Table'
|
|
}, {
|
|
value: 'tag',
|
|
label: 'Tag'
|
|
}, {
|
|
value: 'progress',
|
|
label: 'Progress'
|
|
}, {
|
|
value: 'tree',
|
|
label: 'Tree'
|
|
}, {
|
|
value: 'pagination',
|
|
label: 'Pagination'
|
|
}, {
|
|
value: 'badge',
|
|
label: 'Badge'
|
|
}]
|
|
}, {
|
|
value: 'notice',
|
|
label: 'Notice',
|
|
children: [{
|
|
value: 'alert',
|
|
label: 'Alert'
|
|
}, {
|
|
value: 'loading',
|
|
label: 'Loading'
|
|
}, {
|
|
value: 'message',
|
|
label: 'Message'
|
|
}, {
|
|
value: 'message-box',
|
|
label: 'MessageBox'
|
|
}, {
|
|
value: 'notification',
|
|
label: 'Notification'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'menu',
|
|
label: 'NavMenu'
|
|
}, {
|
|
value: 'tabs',
|
|
label: 'Tabs'
|
|
}, {
|
|
value: 'breadcrumb',
|
|
label: 'Breadcrumb'
|
|
}, {
|
|
value: 'dropdown',
|
|
label: 'Dropdown'
|
|
}, {
|
|
value: 'steps',
|
|
label: 'Steps'
|
|
}]
|
|
}, {
|
|
value: 'others',
|
|
label: 'Others',
|
|
children: [{
|
|
value: 'dialog',
|
|
label: 'Dialog'
|
|
}, {
|
|
value: 'tooltip',
|
|
label: 'Tooltip'
|
|
}, {
|
|
value: 'popover',
|
|
label: 'Popover'
|
|
}, {
|
|
value: 'card',
|
|
label: 'Card'
|
|
}, {
|
|
value: 'carousel',
|
|
label: 'Carousel'
|
|
}, {
|
|
value: 'collapse',
|
|
label: 'Collapse'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'resource',
|
|
label: 'Resource',
|
|
children: [{
|
|
value: 'axure',
|
|
label: 'Axure Components'
|
|
}, {
|
|
value: 'sketch',
|
|
label: 'Sketch Templates'
|
|
}, {
|
|
value: 'docs',
|
|
label: 'Design Documentation'
|
|
}]
|
|
}],
|
|
selectedOptions: ['component', 'data', 'tag']
|
|
};
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Change on select
|
|
|
|
También se pueden seleccionar las opciones del elemento padre.
|
|
|
|
:::demo Por defecto sólo se pueden seleccionar las opciones del último nivel. Al asignar `change-on-select` a `true`, también se pueden seleccionar opciones en los niveles superiores.
|
|
|
|
```html
|
|
<el-cascader
|
|
:options="options"
|
|
change-on-select
|
|
></el-cascader>
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
options: [{
|
|
value: 'guide',
|
|
label: 'Guide',
|
|
children: [{
|
|
value: 'disciplines',
|
|
label: 'Disciplines',
|
|
children: [{
|
|
value: 'consistency',
|
|
label: 'Consistency'
|
|
}, {
|
|
value: 'feedback',
|
|
label: 'Feedback'
|
|
}, {
|
|
value: 'efficiency',
|
|
label: 'Efficiency'
|
|
}, {
|
|
value: 'controllability',
|
|
label: 'Controllability'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'side nav',
|
|
label: 'Side Navigation'
|
|
}, {
|
|
value: 'top nav',
|
|
label: 'Top Navigation'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'component',
|
|
label: 'Component',
|
|
children: [{
|
|
value: 'basic',
|
|
label: 'Basic',
|
|
children: [{
|
|
value: 'layout',
|
|
label: 'Layout'
|
|
}, {
|
|
value: 'color',
|
|
label: 'Color'
|
|
}, {
|
|
value: 'typography',
|
|
label: 'Typography'
|
|
}, {
|
|
value: 'icon',
|
|
label: 'Icon'
|
|
}, {
|
|
value: 'button',
|
|
label: 'Button'
|
|
}]
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form',
|
|
children: [{
|
|
value: 'radio',
|
|
label: 'Radio'
|
|
}, {
|
|
value: 'checkbox',
|
|
label: 'Checkbox'
|
|
}, {
|
|
value: 'input',
|
|
label: 'Input'
|
|
}, {
|
|
value: 'input-number',
|
|
label: 'InputNumber'
|
|
}, {
|
|
value: 'select',
|
|
label: 'Select'
|
|
}, {
|
|
value: 'cascader',
|
|
label: 'Cascader'
|
|
}, {
|
|
value: 'switch',
|
|
label: 'Switch'
|
|
}, {
|
|
value: 'slider',
|
|
label: 'Slider'
|
|
}, {
|
|
value: 'time-picker',
|
|
label: 'TimePicker'
|
|
}, {
|
|
value: 'date-picker',
|
|
label: 'DatePicker'
|
|
}, {
|
|
value: 'datetime-picker',
|
|
label: 'DateTimePicker'
|
|
}, {
|
|
value: 'upload',
|
|
label: 'Upload'
|
|
}, {
|
|
value: 'rate',
|
|
label: 'Rate'
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form'
|
|
}]
|
|
}, {
|
|
value: 'data',
|
|
label: 'Data',
|
|
children: [{
|
|
value: 'table',
|
|
label: 'Table'
|
|
}, {
|
|
value: 'tag',
|
|
label: 'Tag'
|
|
}, {
|
|
value: 'progress',
|
|
label: 'Progress'
|
|
}, {
|
|
value: 'tree',
|
|
label: 'Tree'
|
|
}, {
|
|
value: 'pagination',
|
|
label: 'Pagination'
|
|
}, {
|
|
value: 'badge',
|
|
label: 'Badge'
|
|
}]
|
|
}, {
|
|
value: 'notice',
|
|
label: 'Notice',
|
|
children: [{
|
|
value: 'alert',
|
|
label: 'Alert'
|
|
}, {
|
|
value: 'loading',
|
|
label: 'Loading'
|
|
}, {
|
|
value: 'message',
|
|
label: 'Message'
|
|
}, {
|
|
value: 'message-box',
|
|
label: 'MessageBox'
|
|
}, {
|
|
value: 'notification',
|
|
label: 'Notification'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'menu',
|
|
label: 'NavMenu'
|
|
}, {
|
|
value: 'tabs',
|
|
label: 'Tabs'
|
|
}, {
|
|
value: 'breadcrumb',
|
|
label: 'Breadcrumb'
|
|
}, {
|
|
value: 'dropdown',
|
|
label: 'Dropdown'
|
|
}, {
|
|
value: 'steps',
|
|
label: 'Steps'
|
|
}]
|
|
}, {
|
|
value: 'others',
|
|
label: 'Others',
|
|
children: [{
|
|
value: 'dialog',
|
|
label: 'Dialog'
|
|
}, {
|
|
value: 'tooltip',
|
|
label: 'Tooltip'
|
|
}, {
|
|
value: 'popover',
|
|
label: 'Popover'
|
|
}, {
|
|
value: 'card',
|
|
label: 'Card'
|
|
}, {
|
|
value: 'carousel',
|
|
label: 'Carousel'
|
|
}, {
|
|
value: 'collapse',
|
|
label: 'Collapse'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'resource',
|
|
label: 'Resource',
|
|
children: [{
|
|
value: 'axure',
|
|
label: 'Axure Components'
|
|
}, {
|
|
value: 'sketch',
|
|
label: 'Sketch Templates'
|
|
}, {
|
|
value: 'docs',
|
|
label: 'Design Documentation'
|
|
}]
|
|
}]
|
|
};
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Carga dinamica de elementos hijos
|
|
|
|
Se puede hacer una carga dinamica de elementos hijos cuando se hace clic en el elemento padre o se pasa el ratón sobre el.
|
|
|
|
:::demo En este ejemplo, el array de opciones no tiene datos de ciudades cuando se inicializa. Con el evento `active-item-change`, puede cargar dinámicamente las ciudades de un estado específico. Además, este ejemplo también demuestra cómo se utilizan los`props`.
|
|
|
|
```html
|
|
<el-cascader
|
|
:options="options"
|
|
@active-item-change="handleItemChange"
|
|
:props="props"
|
|
></el-cascader>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
options: [{
|
|
label: 'California',
|
|
cities: []
|
|
}, {
|
|
label: 'Florida',
|
|
cities: []
|
|
}],
|
|
props: {
|
|
value: 'label',
|
|
children: 'cities'
|
|
}
|
|
};
|
|
},
|
|
|
|
methods: {
|
|
handleItemChange(val) {
|
|
console.log('active item:', val);
|
|
setTimeout(_ => {
|
|
if (val.indexOf('California') > -1 && !this.options2[0].cities.length) {
|
|
this.options2[0].cities = [{
|
|
label: 'Los Angeles'
|
|
}];
|
|
} else if (val.indexOf('Florida') > -1 && !this.options2[1].cities.length) {
|
|
this.options2[1].cities = [{
|
|
label: 'Orlando'
|
|
}];
|
|
}
|
|
}, 300);
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Filtrable
|
|
|
|
Buscar y seleccionar opciones con una palabra clave.
|
|
|
|
:::demo Añadir `filterable` a `el-cascader` permite filtrar
|
|
|
|
```html
|
|
<div class="block">
|
|
<span class="demonstration">Only options of the last level can be selected</span>
|
|
<el-cascader
|
|
placeholder="Try searching: Guide"
|
|
:options="options"
|
|
filterable
|
|
></el-cascader>
|
|
</div>
|
|
<div class="block">
|
|
<span class="demonstration">Options of all levels can be selected</span>
|
|
<el-cascader
|
|
placeholder="Try searching: Guide"
|
|
:options="options"
|
|
filterable
|
|
change-on-select
|
|
></el-cascader>
|
|
</div>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
options: [{
|
|
value: 'guide',
|
|
label: 'Guide',
|
|
children: [{
|
|
value: 'disciplines',
|
|
label: 'Disciplines',
|
|
children: [{
|
|
value: 'consistency',
|
|
label: 'Consistency'
|
|
}, {
|
|
value: 'feedback',
|
|
label: 'Feedback'
|
|
}, {
|
|
value: 'efficiency',
|
|
label: 'Efficiency'
|
|
}, {
|
|
value: 'controllability',
|
|
label: 'Controllability'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'side nav',
|
|
label: 'Side Navigation'
|
|
}, {
|
|
value: 'top nav',
|
|
label: 'Top Navigation'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'component',
|
|
label: 'Component',
|
|
children: [{
|
|
value: 'basic',
|
|
label: 'Basic',
|
|
children: [{
|
|
value: 'layout',
|
|
label: 'Layout'
|
|
}, {
|
|
value: 'color',
|
|
label: 'Color'
|
|
}, {
|
|
value: 'typography',
|
|
label: 'Typography'
|
|
}, {
|
|
value: 'icon',
|
|
label: 'Icon'
|
|
}, {
|
|
value: 'button',
|
|
label: 'Button'
|
|
}]
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form',
|
|
children: [{
|
|
value: 'radio',
|
|
label: 'Radio'
|
|
}, {
|
|
value: 'checkbox',
|
|
label: 'Checkbox'
|
|
}, {
|
|
value: 'input',
|
|
label: 'Input'
|
|
}, {
|
|
value: 'input-number',
|
|
label: 'InputNumber'
|
|
}, {
|
|
value: 'select',
|
|
label: 'Select'
|
|
}, {
|
|
value: 'cascader',
|
|
label: 'Cascader'
|
|
}, {
|
|
value: 'switch',
|
|
label: 'Switch'
|
|
}, {
|
|
value: 'slider',
|
|
label: 'Slider'
|
|
}, {
|
|
value: 'time-picker',
|
|
label: 'TimePicker'
|
|
}, {
|
|
value: 'date-picker',
|
|
label: 'DatePicker'
|
|
}, {
|
|
value: 'datetime-picker',
|
|
label: 'DateTimePicker'
|
|
}, {
|
|
value: 'upload',
|
|
label: 'Upload'
|
|
}, {
|
|
value: 'rate',
|
|
label: 'Rate'
|
|
}, {
|
|
value: 'form',
|
|
label: 'Form'
|
|
}]
|
|
}, {
|
|
value: 'data',
|
|
label: 'Data',
|
|
children: [{
|
|
value: 'table',
|
|
label: 'Table'
|
|
}, {
|
|
value: 'tag',
|
|
label: 'Tag'
|
|
}, {
|
|
value: 'progress',
|
|
label: 'Progress'
|
|
}, {
|
|
value: 'tree',
|
|
label: 'Tree'
|
|
}, {
|
|
value: 'pagination',
|
|
label: 'Pagination'
|
|
}, {
|
|
value: 'badge',
|
|
label: 'Badge'
|
|
}]
|
|
}, {
|
|
value: 'notice',
|
|
label: 'Notice',
|
|
children: [{
|
|
value: 'alert',
|
|
label: 'Alert'
|
|
}, {
|
|
value: 'loading',
|
|
label: 'Loading'
|
|
}, {
|
|
value: 'message',
|
|
label: 'Message'
|
|
}, {
|
|
value: 'message-box',
|
|
label: 'MessageBox'
|
|
}, {
|
|
value: 'notification',
|
|
label: 'Notification'
|
|
}]
|
|
}, {
|
|
value: 'navigation',
|
|
label: 'Navigation',
|
|
children: [{
|
|
value: 'menu',
|
|
label: 'NavMenu'
|
|
}, {
|
|
value: 'tabs',
|
|
label: 'Tabs'
|
|
}, {
|
|
value: 'breadcrumb',
|
|
label: 'Breadcrumb'
|
|
}, {
|
|
value: 'dropdown',
|
|
label: 'Dropdown'
|
|
}, {
|
|
value: 'steps',
|
|
label: 'Steps'
|
|
}]
|
|
}, {
|
|
value: 'others',
|
|
label: 'Others',
|
|
children: [{
|
|
value: 'dialog',
|
|
label: 'Dialog'
|
|
}, {
|
|
value: 'tooltip',
|
|
label: 'Tooltip'
|
|
}, {
|
|
value: 'popover',
|
|
label: 'Popover'
|
|
}, {
|
|
value: 'card',
|
|
label: 'Card'
|
|
}, {
|
|
value: 'carousel',
|
|
label: 'Carousel'
|
|
}, {
|
|
value: 'collapse',
|
|
label: 'Collapse'
|
|
}]
|
|
}]
|
|
}, {
|
|
value: 'resource',
|
|
label: 'Resource',
|
|
children: [{
|
|
value: 'axure',
|
|
label: 'Axure Components'
|
|
}, {
|
|
value: 'sketch',
|
|
label: 'Sketch Templates'
|
|
}, {
|
|
value: 'docs',
|
|
label: 'Design Documentation'
|
|
}]
|
|
}]
|
|
};
|
|
}
|
|
};
|
|
</script>
|
|
```
|
|
:::
|
|
|
|
### Atributos
|
|
| Atributo | Descripción | Tipo | Opciones | Por defecto |
|
|
| ---------------- | ---------------------------------------- | --------------- | --------------------- | ----------- |
|
|
| value / v-model | valor seleccionado | array | — | — |
|
|
| options | datos de las opciones | array | — | — |
|
|
| props | opciones de configuracion, mire la tabla siguiente | object | — | — |
|
|
| popper-class | nombre de clase para el Cascader's dropdown | string | — | — |
|
|
| placeholder | input placeholder | string | — | Select |
|
|
| disabled | si Cascader esta disabled | boolean | — | false |
|
|
| clearable | si se puede borrar el valor seleccionado | boolean | — | false |
|
|
| expand-trigger | evento del elemento actual para expandirse. | string | click / hover | click |
|
|
| show-all-levels | si mostrar todos los niveles del valor seleccionado en la entrada | boolean | — | true |
|
|
| filterable | si se pueden buscar las opciones | boolean | — | — |
|
|
| debounce | retardo al escribir la palabra clave del filtro, en milisegundos | number | — | 300 |
|
|
| change-on-select | si se permite seleccionar una opción de cualquier nivel | boolean | — | false |
|
|
| size | tamaño del input | string | medium / small / mini | — |
|
|
| before-filter | funcion antes de filtrar con el valor a filtrar como parámetro. Si se devuelve `false` o se devuelve una `Promise` y luego es rechazada, el filtrado será abortado. | function(value) | — | — |
|
|
|
|
### props
|
|
| Atributo | Descripción | Tipo | Valores aceptados | Por defecto |
|
|
| -------- | ---------------------------------------- | ------ | ----------------- | ----------- |
|
|
| label | especifica qué clave del elemento de la opción se utiliza como etiqueta | string | — | — |
|
|
| value | especifica qué clave del elemento de la opción se utiliza como valor | string | — | — |
|
|
| children | especifica qué clave del elemento de la opción se utiliza como hijo | string | — | — |
|
|
| disabled | especifica qué clave del elemento de la opción indica si está deshabilitada | string | — | — |
|
|
|
|
### Eventos
|
|
| Nombre | Descripción | Parametros |
|
|
| ------------------ | ------------------------------------------------------------ | ------------------------- |
|
|
| change | se dispara cuando el valor cambia | valor |
|
|
| active-item-change | se dispara cuando la opcion activa del parent cambia, sólo funciona cuando `change-on-select` es `false`. | array de opciones activas |
|
|
| blur | se dispara cuando Cascader pierde el foco | (event: Event) |
|
|
| focus | se dispara cuando Cascader obtiene el foco | (event: Event) |
|
|
| visible-change | se dispara cuando el menu desplegable aparece o desaparece | true cuando aparece, y false en otro caso |
|
|
|