当前位置:首页 > uni-app

uniapp 搜索

2026-02-05 18:43:04uni-app

uniapp 搜索功能实现方法

在 uniapp 中实现搜索功能可以通过多种方式,包括前端本地搜索、调用接口进行远程搜索、使用第三方插件等。以下是几种常见的实现方案:

前端本地搜索

适用于数据量较小的情况,直接在前端进行过滤操作。

<template>
  <view>
    <input v-model="keyword" placeholder="请输入搜索关键词" />
    <view v-for="(item, index) in filteredList" :key="index">
      {{ item.name }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      keyword: '',
      list: [
        { name: '苹果' },
        { name: '香蕉' },
        { name: '橙子' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.list.filter(item => 
        item.name.includes(this.keyword)
      )
    }
  }
}
</script>

调用接口远程搜索

适用于数据量较大的情况,通过 API 请求后端数据进行搜索。

<template>
  <view>
    <input v-model="keyword" @input="handleSearch" placeholder="请输入搜索关键词" />
    <view v-for="(item, index) in searchResult" :key="index">
      {{ item.name }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      keyword: '',
      searchResult: []
    }
  },
  methods: {
    async handleSearch() {
      if (!this.keyword.trim()) {
        this.searchResult = []
        return
      }
      const res = await uni.request({
        url: 'https://example.com/api/search',
        data: { keyword: this.keyword }
      })
      this.searchResult = res.data.list
    }
  }
}
</script>

使用 uniCloud 云开发

如果项目使用 uniCloud,可以直接调用云函数进行搜索。

<template>
  <view>
    <input v-model="keyword" @input="searchFromCloud" placeholder="请输入搜索关键词" />
    <view v-for="(item, index) in cloudData" :key="index">
      {{ item.name }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      keyword: '',
      cloudData: []
    }
  },
  methods: {
    async searchFromCloud() {
      const res = await uniCloud.callFunction({
        name: 'search',
        data: { keyword: this.keyword }
      })
      this.cloudData = res.result.data
    }
  }
}
</script>

使用第三方搜索插件

一些第三方插件如 uni-search-bar 可以快速实现搜索栏功能。

<template>
  <view>
    <uni-search-bar @confirm="search" placeholder="搜索"></uni-search-bar>
    <view v-for="(item, index) in resultList" :key="index">
      {{ item.title }}
    </view>
  </view>
</template>

<script>
import uniSearchBar from '@/components/uni-search-bar/uni-search-bar.vue'
export default {
  components: { uniSearchBar },
  data() {
    return {
      resultList: []
    }
  },
  methods: {
    search(e) {
      console.log(e.value)
      // 调用搜索逻辑
    }
  }
}
</script>

搜索优化建议

  • 防抖处理:避免频繁触发搜索请求,可以使用 lodash.debounce 或自定义防抖函数。
  • 模糊搜索:使用正则表达式或字符串匹配实现更灵活的搜索逻辑。
  • 历史记录:存储用户的搜索历史,提升用户体验。
  • 高亮关键词:在搜索结果中高亮匹配的关键词,便于用户快速定位。

以上方法可以根据实际需求选择或组合使用,以实现高效的搜索功能。

uniapp 搜索

标签: uniapp
分享给朋友:

相关文章

uniapp消息推送

uniapp消息推送

uniapp消息推送实现方法 uniapp支持多种消息推送方式,包括uniPush、个推、极光推送等。以下为常见实现方案: uniPush(官方推荐) uniapp官方提供的推送服务,基于DClou…

uniapp隐藏滚动条

uniapp隐藏滚动条

在UniApp中隐藏滚动条可以通过以下几种方法实现,具体根据使用场景选择: 全局样式设置(APP/H5) 通过修改全局CSS样式隐藏滚动条,适用于所有页面: ::-webkit-scrollbar…

uniapp发布到应用商店

uniapp发布到应用商店

发布到苹果App Store 确保开发者账号已注册并加入Apple Developer Program,年费99美元。在Xcode中生成iOS发布证书(.p12)和描述文件(Provisioning…

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中,找到…

uniapp实现标题栏渐变

uniapp实现标题栏渐变

实现标题栏渐变的方法 在UniApp中实现标题栏渐变效果,可以通过修改页面的导航栏样式或使用自定义导航栏来实现。以下是几种常见的方法: 方法一:使用原生导航栏渐变 通过修改pages.json…

uniapp番号

uniapp番号

关于“uniapp番号”这一搜索词,可能存在理解偏差或表述不明确的情况。以下分方向提供相关信息: Uniapp框架简介 Uniapp是一个基于Vue.js的跨平台开发框架,支持编译到iOS、And…