Skip to content

AutoComplete 自动完成

规则

基础示例

js
const rule = {
    type: "autoComplete",
    title: "自动完成",
    field: "auto",
    value: "xaboy",
    props: {
    	fetchSuggestions: function (queryString, cb) {
			cb([
				{value: queryString}, {value: queryString + queryString}
			]);
		}
	}
}

Props 配置示例

远程搜索

js
const rule = {
    type: "autoComplete",
    title: "商品搜索",
    field: "product",
    props: {
        placeholder: "请输入商品名称",
        fetchSuggestions: function (queryString, cb) {
            // 调用远程搜索接口
            if (queryString) {
                searchProducts(queryString).then(res => {
                    cb(res.data.map(item => ({
                        value: item.name,
                        id: item.id
                    })));
                });
            } else {
                cb([]);
            }
        },
        clearable: true,
    },
}

自定义建议项

js
const rule = {
    type: "autoComplete",
    title: "用户搜索",
    field: "username",
    props: {
        placeholder: "请输入用户名",
        valueKey: "name",
        fetchSuggestions: function (queryString, cb) {
            cb([
                {name: queryString + '1', id: 1},
                {name: queryString + '2', id: 2},
            ]);
        },
    },
}

防抖延迟

js
const rule = {
    type: "autoComplete",
    title: "搜索关键词",
    field: "keyword",
    props: {
        placeholder: "请输入关键词",
        debounce: 500,
        fetchSuggestions: function (queryString, cb) {
            // 延迟500ms后执行搜索
            cb([
                {value: queryString + '相关结果1'},
                {value: queryString + '相关结果2'},
            ]);
        },
    },
}

Events 事件示例

监听选择变化

js
const rule = {
    type: "autoComplete",
    title: "商品搜索",
    field: "product",
    props: {
        placeholder: "请输入商品名称",
        fetchSuggestions: function (queryString, cb) {
            cb([
                {value: queryString + '1'},
                {value: queryString + '2'},
            ]);
        },
    },
    on: {
        select: (item) => {
            console.log('选择建议项:', item);
        },
        change: (value) => {
            console.log('输入值改变:', value);
        },
        blur: (event) => {
            console.log('失去焦点:', event);
        },
        focus: (event) => {
            console.log('获得焦点:', event);
        },
        clear: () => {
            console.log('清空输入');
        },
    },
}

选择后填充详细信息

js
const rule = [
    {
        type: "autoComplete",
        title: "商品搜索",
        field: "product",
        props: {
            placeholder: "请输入商品名称",
            fetchSuggestions: function (queryString, cb) {
                cb([
                    {value: 'iPhone 15', id: 1, price: 5999},
                    {value: 'MacBook Pro', id: 2, price: 12999},
                ]);
            },
        },
        inject: true,
        on: {
            select: ($inject, item) => {
                // 选择商品后,自动填充价格
                if (item.price) {
                    $inject.api.setValue('price', item.price);
                }
            },
        },
    },
    {
        type: "input-number",
        field: "price",
        title: "价格",
        props: {
            disabled: true,
        },
    },
]

完整配置项:Element_AutoComplete

value :String

Props

属性名说明类型默认值
placeholder占位文本string
clearable是否可清空booleanfalse
disabled自动补全组件是否被禁用booleanfalse
valueKey输入建议对象中用于显示的键名stringvalue
debounce获取输入建议的防抖延时,单位为毫秒number300
placement菜单弹出位置enumbottom-start
fetchSuggestions获取输入建议的方法, 仅当你的输入建议数据 resolve 时,通过调用 callback(data:[]) 来返回它Array / Function
triggerOnFocuswhether show suggestions when input focusbooleantrue
selectWhenUnmatched在输入没有任何匹配建议的情况下,按下回车是否触发 select 事件booleanfalse
name等价于原生 input name 属性string
ariaLabel原生 aria-label属性string
hideLoading是否隐藏远程加载时的加载图标booleanfalse
popperClass下拉列表的类名string
teleported是否将下拉列表元素插入 append-to 指向的元素下booleantrue
appendTo下拉框挂载到哪个 DOM 元素CSSSelector / HTMLElement
highlightFirstItem是否默认高亮远程搜索结果的第一项booleanfalse
fitInputWidth下拉框的宽度是否与输入框相同booleanfalse

Events

事件名详情类型
blur当选择器的输入框失去焦点时触发Function
focus当选择器的输入框获得焦点时触发Function
input在 Input 值改变时触发Function
clear在点击由 clearable 属性生成的清空按钮时触发Function
select点击选中建议项时触发Function
change在 Input 值改变时触发Function

Slots

插槽名描述说明类型
default自定义输入建议的内容。object
prefix输入框头部内容-
suffix输入框尾部内容-
prepend输入框前置内容,在 prefix 之前-
append输入框后置内容,在 suffix 之后-
loading修改加载区域内容-

FormCreate 是一个开源项目,基于 MIT 许可证发布,欢迎个人和企业用户免费使用