1.0.3 • Published 1 month ago

@tanzhenxing/zx-autocomplete v1.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
1 month ago

ZxAutocomplete 自动补全输入框(Vue3 + 语法,uni-app 多端)

根据输入内容提供对应的输入建议,支持 H5、小程序、App。无浏览器特有 DOM 依赖。

组件特性

  • 支持 v-model 双向绑定
  • 支持同步/异步数据源
  • 支持自定义建议项模板
  • 支持清空、禁用、下拉宽度自适应等
  • 兼容 H5、微信/支付宝/百度/字节小程序、App(nvue/普通)

基础用法

<template>
  <zx-autocomplete
    v-model="state"
    :fetch-suggestions="querySearch"
    placeholder="请输入"
    @select="handleSelect"
  />
</template>

<script setup>
import { ref, onMounted } from 'vue'

const state = ref('')
const restaurants = ref([])

onMounted(() => {
  restaurants.value = loadAll()
})
function querySearch(queryString, cb) {
  const results = queryString
    ? restaurants.value.filter(createFilter(queryString))
    : restaurants.value
  cb(results)
}
function createFilter(queryString) {
  return (restaurant) =>
    restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
}
function loadAll() {
  return [
    { value: '三全鲜食(北新泾店)', address: '长宁区新渔路144号' },
    { value: 'Hot honey 首尔炸鸡', address: '上海市长宁区淞虹路661号' }
  ]
}
function handleSelect(item) {
  uni.showToast({ title: '选中:' + item.value, icon: 'none' })
}
</script>

自定义模板

<template>
  <zx-autocomplete
    v-model="state"
    :fetch-suggestions="querySearch"
    placeholder="请输入"
    @select="handleSelect"
  >
    <template #default="{ item }">
      <view class="custom-item">
        <view class="item-name">{{ item.value }}</view>
        <view class="item-addr">{{ item.address }}</view>
      </view>
    </template>
  </zx-autocomplete>
</template>

<style scoped>
.custom-item {
  display: flex;
  flex-direction: column;
}
.item-name {
  font-size: 28rpx;
  color: #606266;
}
.item-addr {
  font-size: 24rpx;
  color: #b4b4b4;
}
</style>

远程搜索(异步)

<script setup>
import { ref } from 'vue'
const state = ref('')
function querySearchAsync(queryString, cb) {
  setTimeout(() => {
    const results = queryString
      ? [
          { value: '结果1' },
          { value: '结果2' },
          { value: '结果3' }
        ]
      : []
    cb(results)
  }, 500)
}
function handleSelect(item) {
  uni.showToast({ title: '选中:' + item.value, icon: 'none' })
}
</script>
<template>
  <zx-autocomplete
    v-model="state"
    :fetch-suggestions="querySearchAsync"
    placeholder="请输入"
    @select="handleSelect"
  />
</template>

属性(Props)

属性名说明类型默认值
v-model / modelValue选中项绑定值String
placeholder占位文本String请输入
disabled是否禁用Booleanfalse
valueKey输入建议对象中用于显示的键名Stringvalue
clearable是否可清空Booleanfalse
fetchSuggestions获取输入建议的方法Function
triggerOnFocus是否在输入框聚焦时就显示建议Booleantrue
debounce获取输入建议的去抖延时,单位为毫秒Number300
hideLoading是否隐藏远程加载时的加载图标Booleanfalse
highlightFirstItem是否默认高亮远程搜索结果的第一项Booleanfalse
fitInputWidth下拉框的宽度是否与输入框相同Booleanfalse

事件(Emits)

事件名说明参数
select点击选中建议项时触发选中的建议项
change在输入值改变时触发输入框的值
input在输入框值改变时触发输入框的值
focus在输入框获得焦点时触发输入框的值
blur在输入框失去焦点时触发输入框的值
clear在点击清空按钮时触发

插槽(Slots)

插槽名说明参数
default自定义输入建议的内容{ item }
suffix输入框后缀内容
loading自定义加载中状态内容

多端兼容注意事项

  • 组件未使用任何浏览器特有 DOM API,适用于 uni-app 支持的所有平台。
  • 下拉宽度自适应(fitInputWidth)依赖 uni.createSelectorQuery,部分平台如 nvue 可能不支持,建议兼容性测试。
  • 建议 fetchSuggestions 支持 callback 形式,兼容同步/异步。

贡献与反馈

如有问题或建议,欢迎 issue 或 PR。