Autocomplete 自动完成
示例
建议触发时机
设置 suggest-trigger
来指定触发建议的时机。
Suggest on input
Suggest on focus
<template>
<article class="autocomplete-normal-demo">
<section>
<h3>Suggest on input</h3>
<veui-autocomplete
:datasource="suggestions"
clearable
/>
</section>
<section>
<h3>Suggest on focus</h3>
<veui-autocomplete
:datasource="coffees"
suggest-on-focus="focus"
/>
</section>
</article>
</template>
<script>
import { Autocomplete } from 'veui'
export default {
components: {
'veui-autocomplete': Autocomplete
},
data () {
return {
suggestions: [
{
value: 'Moka'
},
{
value: 'Turkish'
},
{
value: 'Latte'
},
{
value: 'Cappuccino'
}
],
coffees: [
{
label: 'Infused',
value: 'infused',
options: [
{
label: 'French press',
value: 'french-press'
},
{
label: 'Cold brew',
value: 'cold-brew'
}
]
},
{
label: 'Espresso',
value: 'espresso',
options: [
{
label: 'Espresso Romano',
value: 'espresso-romano'
},
{
label: 'Guillermo',
value: 'guillermo'
},
{
label: 'Ristretto',
value: 'ristretto'
}
]
},
{
label: 'Milk coffee',
value: 'milk-coffee',
options: [
{
label: 'Latte',
value: 'latte'
},
{
label: 'Macchiato',
value: 'macchiato'
},
{
label: 'Cappuccino',
value: 'cappuccino'
},
{
label: 'White coffee',
value: 'white-coffee'
}
]
}
]
}
}
}
</script>
<style lang="less" scoped>
.autocomplete-normal-demo {
display: flex;
section + section {
margin-left: 60px;
}
}
</style>
严格模式
设置 strict
属性来指定严格模式。{ maxlength?: boolean }
用来指定是否严格输入长度,超出自动截断;{ select?: boolean }
用来指定输入项是否必须完整匹配搜索建议的某项,若不匹配则失焦后自动清空。
0/6
<template>
<article class="autocomplete-normal-demo">
<section>
<veui-checkbox v-model="strict.maxlength">
Strict maxlength
</veui-checkbox>
<veui-checkbox v-model="strict.select">
Strict select
</veui-checkbox>
</section>
<section>
<veui-autocomplete
:datasource="suggestions"
:maxlength="6"
:strict="strict"
/>
</section>
</article>
</template>
<script>
import { Autocomplete, Checkbox } from 'veui'
export default {
components: {
'veui-autocomplete': Autocomplete,
'veui-checkbox': Checkbox
},
data () {
return {
strict: {
maxlength: false,
select: true
},
suggestions: [
{
value: 'Moka'
},
{
value: 'Turkish'
},
{
value: 'Latte'
},
{
value: 'Cappuccino'
}
]
}
}
}
</script>
<style lang="less" scoped>
section {
display: flex;
align-items: center;
gap: 12px;
& + & {
margin-top: 20px;
}
}
</style>
自定义搜索逻辑
设置 match
属性来自定义高亮逻辑;设置 filter
属性来自定义搜索命中逻辑。
大小写敏感搜索叶子节点
<template>
<article class="autocomplete-normal-demo">
<section>
<h3>大小写敏感搜索叶子节点</h3>
<veui-autocomplete
:datasource="suggestions"
:match="match"
:filter="filter"
/>
</section>
</article>
</template>
<script>
import { Autocomplete } from 'veui'
export default {
components: {
'veui-autocomplete': Autocomplete
},
data () {
return {
suggestions: [
{
value: 'Milk coffee',
options: [
{
value: 'Moka'
}
]
},
{
value: 'Turkish'
},
{
value: 'Latte'
},
{
value: 'Cappuccino'
}
]
}
},
methods: {
match ({ label }, keyword) {
const index = label.indexOf(keyword)
return index >= 0
? [[index, index + keyword.length]]
: false
},
filter ({ options }, _, { offsets }) {
// 不要父节点,只要叶子节点
return options && options.length
? false
: offsets === true || (!!offsets && !!offsets.length)
}
}
}
</script>
<style lang="less" scoped>
.autocomplete-normal-demo {
display: flex;
section + section {
margin-left: 60px;
}
}
</style>
API
属性
名称 | 类型 | 默认值 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
datasource | Array<string | Object> | [] | 数据源数组,项目为
| ||||||||||||
value | * | - |
当前选中的值。 | ||||||||||||
disabled | boolean | false | 是否为禁用状态。 | ||||||||||||
readonly | boolean | false | 是否为只读状态。 | ||||||||||||
match | (item, keyword, { ancestors }) => boolean | [number, number] | Array<[number, number]> | - | 支持自定义高亮逻辑,默认进行大小写不敏感的子串匹配。 | ||||||||||||
filter | (item, keyword, { ancestors, offsets }) => boolean | - | 支持自定义搜索命中逻辑。 | ||||||||||||
suggest-trigger | string | Array<string> | 'input' | 触发建议下拉面板的时机,可用值有:'input' 、'focus' 。 | ||||||||||||
expanded | boolean | false |
建议面板是否展开(如果 | ||||||||||||
placeholder | string | - | 输入占位符。 | ||||||||||||
clearable | boolean | false | 是否显示清除按钮。 | ||||||||||||
composition | boolean | false | 是否感知输入法输入过程的值。 | ||||||||||||
autofocus | boolean | false | 是否自动获取焦点。 | ||||||||||||
select-on-focus | boolean | false | 聚焦时是否自动选中输入框文本。 | ||||||||||||
maxlength | number | - | 输入字符串的长度限制。 | ||||||||||||
strict | boolean | Object | false | 当为
| ||||||||||||
get-length | function(string): number | 自定义的字符长度计算函数。 | |||||||||||||
trim | boolean | string | false | 是否移除前后空格。当为
| ||||||||||||
overlay-class | string | Array | Object | - | 参考 Overlay 组件的 overlay-class 属性。 | ||||||||||||
overlay-style | string | Array | Object | - | 参考 Overlay 组件的 overlay-style 属性。 |
插槽
名称 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
suggestions | 下拉建议面板插槽。
| ||||||||||||
option-label | 下拉面板中选项插槽。
| ||||||||||||
no-data | 无匹配的候选项时需要展示的内容。默认在无候选项时关闭下拉菜单。
|
事件
名称 | 描述 |
---|---|
input |
当在 |
select | 采纳建议时触发,参数是当前值。 |
toggle | 提示面板展开状态切换时触发,回调参数为 (expanded: boolean) 。expanded 表示操作将触发提示面板展开还是收起。 |
clear | 清除当前值时触发。 |
自定义样式
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
--dls-dropdown-max-display-items | <integer> | 8 | 下拉选项同时显示的最大项目数,下拉框的最大高度将由此计算得出。 |