自动完成(Autocomplete)
Quasar自动完成组件绑定到父文本字段(例如QInput、QSearch、QChipsInput),并在用户输入时向用户提供建议。 提供给用户的建议基于静态结果集或异步函数调用(例如,包含Ajax请求)。
安装
Edit /quasar.conf.js
:framework: {
components: ['QAutocomplete']
}
基础用法
只要此组件由Vue呈现,它就会捕获所有的Ajax调用。<!-- 绑定到父QInput -->
<q-input color="amber" v-model="terms" placeholder="Type 'fre'">
<q-autocomplete
@search="search"
:min-characters="3"
@selected="selected"
/>
</q-input>
<!-- 绑定到父QSearch -->
<q-search v-model="terms" placeholder="Start typing a country name">
<q-autocomplete @search="search" @selected="selected" />
</q-search>
<!-- 在结果之间添加分隔符 -->
<q-search v-model="terms">
<q-autocomplete
separator
@search="search"
@selected="selected"
/>
</q-search>
Vue属性
Vue属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
min-characters |
数字 | 1 | 最小多少字符触发组件建议某些内容? |
max-results |
数字 | 6 | 我们可以一次显示多少结果? |
static-data |
对象 | None | 使用静态建议。无需进行Ajax调用。过滤由自动完成组件提供。 |
filter |
函数 | 内部实现 | 如果提供,自动完成将执行自定义过滤。 |
debounce |
数字 | 500 | 在按键到寻找新结果之间以毫秒为单位的时间。如果使用AJAX请求,则有利于延迟。 |
separator |
布尔值 | false | 如果设置为“true”,它会在要从中选择的值之间添加一个分隔符。 |
Vue方法
不需要手动触发这些方法,因为它们是自动调用的。只有当你的用例非常特殊时才使用它们。
Vue方法 | 说明 |
---|---|
trigger() |
触发建议(父文本字段必须聚焦)。 |
hide() |
隐藏建议弹出框。 |
setValue() |
将文本字段字符串设置为提供的值。 |
Vue事件
Vue事件 | 说明 |
---|---|
@search(terms,Function done) |
当搜索开始并提供一些结果时由组件触发。 |
@selected(item) |
当用户选择了一个建议时触发。 |
@show |
当选择弹出框打开时触发。 |
@hide |
当选择弹出框关闭时触发。 |
搜索事件示例:
function search (terms, done) { |
使用静态数据
当使用静态数据时,指定一个对象(注意它使用了列表和列表项组件的一些属性):// 静态数据
{
// 属性名称将会被filter()使用用于过滤下面的对象数组。
field: 'value',
list: [
{
value: 'Romania', // 当选中时给出的值
label: 'Romania', // 作为建议选择项主标签的显示值
sublabel: 'Continent: Europe', // 可选的
icon: 'location_city', // 可选的
stamp: '18 mil', // 可选的
...
},
...
]
}
以下是可以使用的属性的完整列表:
属性 | 类型 | 说明 |
---|---|---|
leftColor |
字符串 | 左侧颜色,来自Quasar调色板。 |
icon |
字符串 | 左侧图标。 |
avatar |
字符串 | 头像的静态URL。 |
letter |
字符串 | 字符。 |
leftInverted |
布尔值 | 反转模式,但仅适用于图标和字母。 |
leftTextColor |
字符串 | 仅在使用图标或字母时覆盖默认的“white”文字颜色。 |
image |
字符串 | 图像的静态URL。 |
label |
字符串 | 选择的主标签。 |
sublabel |
字符串 | 选择的副标签。 |
labelLines |
字符串/数字 | 标签可以扩展到的行数。 |
sublabelLines |
字符串/数字 | 副标签可以扩展到的行数。 |
inset |
布尔值 | 插入标签,如果没有指定左侧内容(没有图标、头像、字母或图片)。 |
rightColor |
字符串 | 右侧颜色,来自Quasar调色板。 |
rightIcon |
字符串 | 右侧图标。 |
rightAvatar |
字符串 | 右侧头像的静态URL。 |
rightLetter |
字符串 | 右侧字符。 |
rightImage |
字符串 | 右侧图片静态URL。 |
rightInverted |
布尔值 | 反转模式,但仅适用于图标和字母。 |
rightTextColor |
字符串 | 仅在使用图标或字母时覆盖默认的“white”文字颜色。 |
stamp |
字符串 | 用于右侧。例如:’10分钟前’。 |
<template> |
定制过滤器
要执行像模糊搜索一样的自定义过滤,请提供具有以下签名的可选函数:<template>
<q-search v-model="terms">
<!-- 提供自定义过滤函数 -->
<q-autocomplete
:filter="myFilter"
@search="search"
@selected="selected"
/>
</q-search>
</template>
<script>
// fuzzysearch (needle, haystack) { return true|false }
export default {
...,
methods: {
myFilter(terms, { field, list }) {
const token = terms.toLowerCase();
return list.filter(item => fuzzysearch(token, item[field].toLowerCase()));
}
}
}
</script>
使用异步方法(Ajax调用?)
如果您想从服务器调用数据,则可以使用search()
方法执行以下操作。
<template> |