当前位置:首页 > uni-app

uniapp搜索筛选

2026-03-05 00:31:13uni-app

实现搜索筛选功能

在UniApp中实现搜索筛选功能通常涉及前端界面设计和后端数据处理。以下是几种常见的方法:

使用<input>v-model绑定搜索关键词

uniapp搜索筛选

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

<script>
export default {
  data() {
    return {
      searchText: '',
      originalList: [],
      filteredList: []
    }
  },
  methods: {
    filterData() {
      this.filteredList = this.originalList.filter(item => 
        item.name.includes(this.searchText)
      )
    }
  }
}
</script>

结合下拉筛选组件

<template>
  <view>
    <picker @change="bindPickerChange" :value="index" :range="filterOptions">
      <view>当前筛选:{{filterOptions[index]}}</view>
    </picker>
    <view v-for="(item, i) in filteredData" :key="i">
      {{item.name}}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      filterOptions: ['全部', '类型1', '类型2'],
      index: 0,
      originalData: [],
      filteredData: []
    }
  },
  methods: {
    bindPickerChange(e) {
      this.index = e.detail.value
      this.applyFilter()
    },
    applyFilter() {
      if(this.index === 0) {
        this.filteredData = [...this.originalData]
      } else {
        this.filteredData = this.originalData.filter(item => 
          item.type === this.filterOptions[this.index]
        )
      }
    }
  }
}
</script>

优化搜索性能

对于大数据量列表,建议采用防抖技术减少频繁触发搜索:

uniapp搜索筛选

let timer = null
methods: {
  filterData() {
    clearTimeout(timer)
    timer = setTimeout(() => {
      // 实际过滤逻辑
    }, 300)
  }
}

多条件组合筛选

实现多个筛选条件的组合查询:

filterData() {
  this.filteredList = this.originalList.filter(item => {
    const nameMatch = item.name.includes(this.searchText)
    const typeMatch = this.selectedType === '全部' || item.type === this.selectedType
    const priceMatch = item.price >= this.minPrice && item.price <= this.maxPrice
    return nameMatch && typeMatch && priceMatch
  })
}

与后端API结合

当数据量较大时,建议将筛选逻辑放在后端:

async fetchFilteredData() {
  const res = await uni.request({
    url: '/api/filter',
    data: {
      keyword: this.searchText,
      category: this.selectedCategory,
      page: this.currentPage
    }
  })
  this.filteredList = res.data.list
}

注意事项

  • 移动端输入框建议添加confirm-type="search"属性优化键盘体验
  • 筛选结果为空时应显示友好提示
  • 复杂筛选条件可考虑使用弹出层或侧边栏布局
  • 分页加载时需要重置页码参数

标签: uniapp
分享给朋友:

相关文章

uniapp关闭侧滑

uniapp关闭侧滑

禁用全局侧滑返回功能 在pages.json中配置全局禁止侧滑返回: { "globalStyle": { "popGesture": "none" } } 禁用单个页面侧滑…

混合uniapp

混合uniapp

混合 UniApp 开发模式 混合 UniApp 开发通常指将 UniApp 与其他原生技术(如原生 iOS/Android 或 Flutter)结合使用,以兼顾跨平台效率和原生性能。以下是常见的混合…

uniapp开发

uniapp开发

uniapp开发简介 uniapp(DCloud出品)是一款基于Vue.js的跨平台开发框架,支持一次开发,多端发布(iOS、Android、Web、小程序等)。其核心优势在于代码复用率高,开发效率高…

uniapp 推送

uniapp 推送

uniapp 推送实现方法 uniapp 推送功能可以通过多种方式实现,包括使用第三方推送服务、原生插件或 uni-push 服务。以下是几种常见的实现方法: 使用 uni-push 服务 uni…

uniapp倒计时

uniapp倒计时

uniapp倒计时实现方法 使用setInterval实现基础倒计时 在uniapp中可以通过setInterval和clearInterval实现基础的倒计时功能。创建一个倒计时组件或页面方法:…

uniapp即时通讯

uniapp即时通讯

uniapp 即时通讯实现方法 使用第三方 SDK 或服务 市面上有许多成熟的即时通讯 SDK 和服务可以集成到 uniapp 中,例如融云、环信、腾讯云通信等。这些服务通常提供完善的 API 和文档…