uni-app.07.自动补全插件input-autocomplete的使用

前言

上次使用uni-app开发的司机端总算告一段落了,接下来却开始了真正的噩梦。为什么这么说呢,因为这次开发的是企业管理端,开发内容和具体的业务逻辑都要比司机端要复杂的多,只能硬着头皮上啊,谁叫咱这么「优秀」呢?!o(╥﹏╥)o

我说过我是一个菜鸟,是真的!这不刚一上来就遇到了一个难题:后台登录页面的企业名称输入框有个自动补全的功能,像下图这样

在这里插入图片描述

咱也不怎么会vue啊,怎么办?第一时间想到去搜插件呗,在uniapp插件市场自动补全,如下图

在这里插入图片描述

先说一下我为什么选择第二个?

首先呢,第二个在下载|赞赏|收藏上人数都比较多;

其次呢,第二个样式好看些,我之前说过我是纯后端,前端的东西七窍通了六窍,唯有一窍不通o(╥﹏╥)o

input-autocomplete的使用

1.使用HBuilderX导入插件

一搬情况下我都是选择上面一种使用HBuilderX导入插件,但是为了演示本次效果,我们选择使用HBuilderX导入示例项目

在这里插入图片描述

导入成功之后就像下面这样

在这里插入图片描述

2.运行示例项目

我们来运行一下作者提供的测试项目,我们这里选择运行到小程序模拟器,在示例项目中我没有加载数据,我们首先看下使用静态数据的情况

在这里插入图片描述

3.存在的问题

1).数据过渡曝光

上面我们看到了,当输入框刚获取焦点就自动加载了所有的数据,这个在实际开发者是不合理的。就像我这次做的企业管理端,一个企业用户准备登录系统,刚准备输入自己的企业名称结果看到了平台上所有入驻的企业,这个就属于数据的过度曝光

2).数据过多页面拉长的问题

我们修改改变静态数据的方法,将数据增加几条,如下

methods: {
		changeStaticData() {
				console.log('改变静态数据');
				this.autocompleteStringList= [
					'1汉字行',
					'1change data',
					'1guang zhou',
					{
						//自定义数据对象必须要有text属性
						text: '1hello',
						//其它字段根据业务需要添加
						key: '1hello key'
					},
					'1不 行',
					{
						//自定义数据对象必须要有text属性
						text: '1我是静态数据',
						//其它字段根据业务需要添加
						id: '1hz'
					},
					'2input-autoComplete',
					'3input-autoComplete',
					'4input-autoComplete',
					'5input-autoComplete',
					'6input-autoComplete',
					'7input-autoComplete',
					'8input-autoComplete',
					'9input-autoComplete',
					'10input-autoComplete',
				];
			}
		}

然后我们再次运行项目,结果看下图

在这里插入图片描述

4.解决问题

1).问题一解决方案

针对上面提到的问题一:我们需要在文本获取焦点的时候判断是否输入了内容,然后根据输入的内容去搜索结果并显示就可以了

首先我们为控件设置最小匹配长度min(必须最少输入几个字符才开启自动补全)

在这里插入图片描述

其次我们修改源码的方法getData,当输入长度小于min的时候,不显示选择框

在这里插入图片描述

这样我们的第一个问题就解决了,效果如下:

在这里插入图片描述

2).问题二解决方案

这个相比较与第一个就显得简单的多了,我们直接定位到源码最底部的样式,找到下方选择框.str-auto-complete-container的样式,修改成如下

<style>
  .str-auto-complete-container {
      min-width: 15%;
      height: auto;
      border: 1px solid #f3f3f4;
      position: absolute;
      z-index: 9997;
      background: #fff;
      // 开启处置方向的滚动条
      overflow-y:auto;
      // 最少显示1条记录的空间
      min-height: 53rpx;
      // 最多显示10条记录的空间
      max-height: 530rpx;

      .str-auto-complete-item {
        position: relative;
        padding: 10upx;
        z-index: 9999;
        // 更改以下每条记录的字体大小
        font-size: 28rpx;
      }
    }
</style

再次运行该示例项目,运行结果如下

在这里插入图片描述

解决完以上两个问题,该插件基本就可以使用了。当然了如果大家还有别的需求可以去uni-app的插件市场向作者反馈,也可像我一样自己捯饬一下。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
uni-app中,可以使用 `uni-input` 组件结合 `uni-popup` 组件来实现自动补全的功能。具体步骤如下: 1. 安装 `luch-request` 插件,用于发送请求获取数据。 ``` npm install luch-request --save ``` 2. 在需要使用自动补全的页面中引入 `uni-input` 和 `uni-popup` 组件。 ```html <template> <view> <uni-input v-model="searchText" @focus="showPopup = true" placeholder="请输入搜索关键字"></uni-input> <uni-popup v-model="showPopup" :position="position" style="width: 90%;max-height: 200rpx;"> <view v-if="searchText && searchList.length"> <view v-for="(item, index) in searchList" :key="index" class="popup-item" @tap="selectItem(item)"> {{item.name}} </view> </view> <view v-else class="popup-item"> 暂无数据 </view> </uni-popup> </view> </template> ``` 3. 在 `script` 中定义相关变量和方法。 ```javascript import request from '@/common/request.js' export default { data() { return { searchText: '', // 搜索文本 showPopup: false, // 是否显示下拉框 position: 'bottom', // 显示位置(可选值:top、bottom、center) searchList: [] // 搜索结果列表 } }, methods: { // 发送请求获取搜索结果 async getSearchList() { const res = await request.get('/search', {keywords: this.searchText}) if (res.code === 200) { this.searchList = res.data } else { uni.showToast({ title: res.msg, icon: 'none' }) } }, // 选中某一项 selectItem(item) { this.searchText = item.name this.showPopup = false } }, watch: { // 监听搜索文本变化 searchText(newVal) { if (newVal) { this.getSearchList() } else { this.searchList = [] } } } } ``` 说明: - 在 `uni-input` 组件中使用了 `@focus` 事件,当输入框获取焦点时,显示下拉框。 - 在 `uni-popup` 组件中使用了 `v-model` 实现双向绑定,控制下拉框的显示和隐藏。 - 在下拉框中使用了 `v-for` 渲染搜索结果列表,使用 `@tap` 监听选中某一项的事件。 - 在 `watch` 中监听搜索文本变化,当文本不为空时发送请求获取搜索结果,为空时清空搜索结果列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潮汐先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值