# Cascader cascade selection

# Import

import PressCascader from 'press-ui/press-cascader/press-cascader';

export default {
  components: {
    PressCascader,
  }
}

# Code demonstration

# Basic usage

The cascade selection component can be used with Field and PopupPlus components, as shown below:

<press-field
  :value="fieldValue"
  is-link
  readonly
  label="Region"
  placeholder="Please select your region"
  @click="onClick"
/>
<press-popup-plus :show="show" round position="bottom">
  <press-cascader
    v-if="show"
    :value="cascaderValue"
    title="Please select your region"
    :options="options" @close="onClose" @finish="onFinish" 
  /> 
</press-popup-plus> 
const options = [
  {
    text: 'Zhejiang Province',
    value: '330000',
    children: [{ text: 'Hangzhou City', value: '330100' }],
  },
  {
    text: 'Jiangsu Province',
    value: '320000',
    children: [{ text: 'Nanjing City', value: '320100' }],
  },
];

export default {
  data() {
    return {
      show: false,
      options,
      fieldValue: '',
      cascaderValue: '',
    }
  },
  methods: {
    onClick() {
      this.show = true;
    },

    onClose() {
      this.show = false;
    },

    onFinish(detail) {
      const { selectedOptions, value } = detail;
      const fieldValue = selectedOptions
          .map((option) => option.text || option.name)
          .join('/');
      this.fieldValue = fieldValue;
      this.cascaderValue = value;
    }
  },
};

# Custom color

Use the active-color attribute to set the highlight color of the selected state.

<press-cascader
  :value="cascaderValue"
  title="Please select your region"
  :options="options"
  active-color="#ee0a24"
  @close="onClose"
  @finish="onFinish"
/>

# Asynchronous loading options

You can listen to the change event and dynamically set options to achieve asynchronous loading options.

<press-field
  :value="fieldValue"
  is-link
  readonly
  label="region"
  placeholder="Please select your region"
  @click="onClick"
/>
<press-popup-plus :show="show" round position="bottom">
  <press-cascader
    v-if="show"
    :value="cascaderValue"
    title="Please select your region"
    :options="options"
    @close="onClose"
    @change="onChange"
    @finish="onFinish"
  />
</press-popup-plus>
export default {
  data() {
    return {
      options: [
        {
          text: 'Zhejiang Province',
          value: '330000',
          children: [],
        }
      ];
    }
  },
  methods: {
    onChange(detail) {
      const { value } = detail;
      if (value === this.options[0].value) {
        setTimeout(() => {
        const children = [
          { text: 'Hangzhou', value: '330100' },
          { text: 'Ningbo', value: '330200' },
        ];
        this.options[0].children = children;
        }, 500);
      }
    }
  },
};

# Custom field names

The field names in options can be customized through the field-names attribute.

<press-cascader
  :value="code"
  title="Please select your region"
  :options="options"
  :field-names="fieldNames"
/>
export default {
  data() {
    return {
      code: '',
      fieldNames: {
      text: 'name',
      value: 'code',
      children: 'items',
    },
    options: [
      {
        name: 'Zhejiang Province',
        code: '330000',
        items: [{ name: 'Hangzhou City', code: '330100' }],
      },
      {
        name: 'Jiangsu Province',
        code: '320000',
        items: [{ name: 'Nanjing City', code: '320100' }],
      },
      ],
    }
  },
};

# API

# Props

Parameter Description Type Default value
title Top title string -
value Value of the selected item string | number -
options Optional data source CascaderOption[] -
placeholder Prompt text when unselected string Please select
active-color Highlight color of the selected state string #1989fa
swipeable Whether to enable left and right swipe gesture switching boolean false
closeable Whether to display the close icon boolean true
ellipsis Whether to omit long title text. If the text is too long, horizontal scrolling will occur after closing boolean true
show-header Whether to display the title bar boolean true
close-icon Close icon name or image link, equivalent to the name attribute of the Icon component string cross
field-names Customize the fields in the options structure CascaderFieldNames { text: 'text', value: 'value', children: 'children' }
use-title-slot Whether to use the slot for the custom title boolean false

# CascaderOption data structure

The options property is an array of objects. Each object in the array configures an option. The object can contain the following values:

Key name Description Type
text Option text (required) string
value Option value (required) string | number
color Option text color string
children List of child options CascaderOption[]
disabled Whether to disable the option boolean
className Add additional class for the corresponding column string | Array | object

# Events

Event Description Callback parameter
change Triggered when the selected item changes event.detail: { value: string | number, selectedOptions: CascaderOption[], tabIndex: number }
finish Triggered after all options are selected event.detail: { value: string | number, selectedOptions: CascaderOption[], tabIndex: number }
close Triggered when the close icon is clicked -
click-tab Triggered when the tab is clicked event.detail: { tabIndex: number, title: string }

# Slots

Name Description Parameters
title Custom top title -

# Online debugging

横屏