# TreeSelect
### Intro
Used to select from a set of related data sets.
### Install
Register component globally via `app.use`, refer to [Component Registration](#/en-US/advanced-usage#zu-jian-zhu-ce) for more registration ways.
```js
import { createApp } from 'vue';
import { TreeSelect } from 'vant';
const app = createApp();
app.use(TreeSelect);
```
## Usage
### Radio Mode
```html
```
```js
import { reactive } from 'vue';
export default {
setup() {
const state = reactive({
activeId: 1,
activeIndex: 0,
});
const items = [
{
text: 'Group 1',
children: [
{ text: 'Delaware', id: 1 },
{ text: 'Florida', id: 2 },
],
},
{
text: 'Group 2',
children: [
{ text: 'Alabama', id: 5 },
{ text: 'Kansas', id: 6 },
],
},
];
return {
state,
items,
};
},
};
```
### Multiple Mode
```html
```
```js
import { reactive } from 'vue';
export default {
setup() {
const state = reactive({
activeId: [1, 2],
activeIndex: 0,
});
const items = [
{
text: 'Group 1',
children: [
{ text: 'Delaware', id: 1 },
{ text: 'Florida', id: 2 },
],
},
{
text: 'Group 2',
children: [
{ text: 'Alabama', id: 5 },
{ text: 'Kansas', id: 6 },
],
},
];
return {
state,
items,
};
},
};
```
### Custom Content
```html
```
```js
import { ref } from 'vue';
export default {
setup() {
const activeIndex = ref(0);
return {
activeIndex,
items: [{ text: 'Group 1' }, { text: 'Group 2' }],
};
},
};
```
### Show Badge
```html
```
```js
import { ref } from 'vue';
export default {
setup() {
const activeIndex = ref(0);
return {
activeIndex,
items: [
{ text: 'Group 1', children: [], dot: true },
{ text: 'Group 2', children: [], badge: 5 },
],
};
},
};
```
## API
### Props
| Attribute | Description | Type | Default |
| --- | --- | --- | --- |
| items | Required datasets for the component | _Item[]_ | `[]` |
| height | Height | _number \| string_ | `300` |
| main-active-index | The index of selected parent node | _number \| string_ | `0` |
| active-id | Id of selected item | _number \| string \|
(number \| string)[]_ | `0` |
| max | Maximum number of selected items | _number \| string_ | `Infinity` |
| selected-icon | Selected icon | _string_ | `success` |
### Events
| Event | Description | Arguments |
| --- | --- | --- |
| click-nav | Emitted when parent node is selected | index: index of selected parent |
| click-item | Emitted when item is selected | data: selected item |
### Slots
| Name | Description |
| ------- | -------------------- |
| content | Custom right content |
### Data Structure of Item
`items` should be an array contains specified tree objects.
In every tree object, `text` property defines `id` stands for the unique key while the `children` contains sub-tree objects.
```js
[
{
// name of the parent node
text: 'Group 1',
// badge
badge: 3,
// Whether to show red dot
dot: true,
// ClassName of parent node
className: 'my-class',
// leaves of this parent node
children: [
{
// name of the leaf node
text: 'Washington',
// id of the leaf node, component highlights leaf node by comparing the activeId with this.
id: 1,
// disable options
disabled: true,
},
{
text: 'Baltimore',
id: 2,
},
],
},
];
```
### CSS Variables
The component provides the following CSS variables, which can be used to customize styles. Please refer to [ConfigProvider component](#/en-US/config-provider).
| Name | Default Value | Description |
| --- | --- | --- |
| --van-tree-select-font-size | `@font-size-md` | - |
| --van-tree-select-nav-background-color | `@background-color` | - |
| --van-tree-select-content-background-color | `@white` | - |
| --van-tree-select-nav-item-padding | `14px @padding-sm` | - |
| --van-tree-select-item-height | `48px` | - |
| --van-tree-select-item-active-color | `@red` | - |
| --van-tree-select-item-disabled-color | `@gray-5` | - |
| --van-tree-select-item-selected-size | `16px` | - |