Ant Design Vue or AntD Vue, is a useful UI framework made for Vue.js.
In this article, we’ll look at how to use it in our Vue apps.
Customize Autocomplete
We can customize our autocomplete input with various props.
The filter-options
prop lets us change how choices are filtered:
<template>
<a-auto-complete
:data-source="dataSource"
style="width: 200px"
placeholder="input here"
:filter-option="filterOption"
/>
</template>
<script>
export default {
data() {
return {
dataSource: ["apple", "orange", "grape"]
};
},
methods: {
filterOption(input, option) {
return (
option.componentOptions.children[0].text
.toUpperCase()
.indexOf(input.toUpperCase()) >= 0
);
}
}
};
</script>
We get the text input value which is the input
parameter with the option.componentOptions.children[0].text
property.
Then we compare both of them as uppercase.
If we return true
, then it’s displayed in the dropdown.
Cascade Selection Box
We can add a cascade dropdown menu with the a-cascader
component.
For example, we can write:
<template>
<a-cascader :options="options" placeholder="Please select" @change="onChange"/>
</template>
<script>
export default {
data() {
return {
options: [
{
value: "fruit",
label: "Fruit",
children: [
{
value: "apple",
label: "Apple"
}
]
},
{
value: "drink",
label: "Drink",
children: [
{
value: "coffee",
label: "Coffee"
}
]
}
]
};
},
methods: {
onChange(value) {
console.log(value);
}
}
};
</script>
to add the options with the options
reactive property.
We set that as the value of the options
prop.
It emits the change
event with the selected item.
We can add the change-on-select
prop to emit the change
event on select:
<template>
<a-cascader :options="options" placeholder="Please select" change-on-select @change="onChange"/>
</template>
<script>
export default {
data() {
return {
options: [
{
value: "fruit",
label: "Fruit",
children: [
{
value: "apple",
label: "Apple"
}
]
},
{
value: "drink",
label: "Drink",
children: [
{
value: "coffee",
label: "Coffee"
}
]
}
]
};
},
methods: {
onChange(value) {
console.log(value);
}
}
};
</script>
Also, we can render the selected item in a custom way by populating the displayRender
slot:
<template>
<a-cascader :options="options" placeholder="Please select" change-on-select @change="onChange">
<template slot="displayRender" slot-scope="{ labels, selectedOptions }">
<span v-for="(label, index) in labels" :key="selectedOptions[index].value">
<span v-if="index === labels.length - 1">
{{ label }} (
<a @click="e => handleAreaClick(e, label, selectedOptions[index])">
{{
selectedOptions[index].code
}}
</a>)
</span>
<span v-else @click="onChange">{{ label }} /</span>
</span>
</template>
</a-cascader>
</template>
<script>
export default {
data() {
return {
options: [
{
value: "fruit",
label: "Fruit",
code: 1,
children: [
{
value: "apple",
label: "Apple",
code: 2
}
]
},
{
value: "drink",
label: "Drink",
code: 3,
children: [
{
value: "coffee",
label: "Coffee",
code: 4
}
]
}
]
};
},
methods: {
onChange(value) {
console.log(value);
}
}
};
</script>
selectedOptions[index]
has the selected item.
labels
have the label for each value.
Disable Items
We can disable items with the disabled
property:
<template>
<a-cascader :options="options" @change="onChange"/>
</template>
<script>
export default {
data() {
return {
options: [
{
value: "fruit",
label: "Fruit",
children: [
{
value: "apple",
label: "Apple"
}
]
},
{
value: "drink",
label: "Drink",
disabled: true,
children: [
{
value: "coffee",
label: "Coffee"
}
]
}
]
};
},
methods: {
onChange(value) {
console.log(value);
}
}
};
</script>
Conclusion
We can customize our autocomplete component with many ways.
Also, Ant Design Vue comes with a cascade selection dropdown.