119.【Uniapp】(十)

简介: 119.【Uniapp】
  1. 防抖处理

正常情况下:我们每次输入文本框的时候,都会进行请求一次。我们不能这样做(因为会给网络造成拥堵的操作)

<template>
  <view>
    <view class="search-box">
      <!-- 使用 uni-ui 提供的搜索组件  1. cancelButton:none 一直不显示取消按钮 2.绑定input事件-->
      <uni-search-bar @input="input" :radius="100" cancelButton="none" :focus="true"></uni-search-bar>
    </view>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        //延时器的timerId
        timer: null,
      };
    },
    methods: {
      // input事件的处理函数
      input(e) {
        // 清除对应的延时器-> 目的是假如说在500毫秒内用户仍然在输入那么就重新记时
        clearTimeout(this.timer)
        // 重新启动一个演示器
        setTimeout(() => {
          // 假如说500毫秒时间到了,那么我们就赋值给数据
          console.log('搜索页面search文本框->', e)
        }, 500)
      }
    }
  }
</script>

  1. 实现搜索建议列表

1.在 data 中定义如下的数据节点,用来存放搜索建议的列表数据:

data() {
  return {
    // 搜索结果列表
    searchResults: []
  }
}
      async getSearchList() {
        if (this.kw === '') {
          this.searchResults = []
        } else {
          const {
            data: res
          } = await uni.$http.get('/api/public/v1/goods/qsearch', {
            query: this.kw
          })
          if (res.meta.status === 200) {
            this.searchResults = res.message
          }
        }
      }
  1. 渲染搜素建议列表
<!-- 搜索建议列表 -->
    <view class="sugg-list">
      <view class="sugg-item" v-for="(item,index) in searchResults" :key="index">
        <view class="goods-name">
          {{item.goods_name}}
        </view>
        <uni-icons type="arrowright" size="16"></uni-icons>
      </view>
    </view>
.sugg-list {
    // 内间距
    padding: 0 5px;
    .sugg-item {
      // 左右布局
      display: flex;
      // 纵向居中
      align-items: center;
      // 横向两侧对其
      justify-content: space-between;
      font-size: 12px;
      padding: 13px 0;
      border-bottom: 1px solid #efefef;
      .goods-name {
        // 不允许换行
        white-space: nowrap;
        // 超出的内容隐藏
        overflow: hidden;
        // 超出的文本进行替换
        text-overflow: ellipsis;
      }
    }

  1. 点击搜索建议的 Item 项,跳转到商品详情页面:
<!-- 搜索建议列表 -->
    <view class="sugg-list">
      <view class="sugg-item" v-for="(item,index) in searchResults" :key="index" @click="gotoDetail(item.goods_id)">
        <view class="goods-name">
          {{item.goods_name}}
        </view>
        <uni-icons type="arrowright" size="16"></uni-icons>
      </view>
    </view>
     gotoDetail(goods_id) {
        uni.navigateTo({
          url: '/subpkg/goods_detail/goods_detail?goods_id=' + goods_id
        })

(4).搜索历史
  1. 渲染搜索历史的基本结构

在 data 中定义搜索历史的假数据:

uni-tag -> 是一个tag标签
// 搜索历史
        historyList: ['a', 'b', 'jsxs']
    <!-- 搜索历史 -->
    <view class="history-box">
      <!-- 标题区域 -->
      <view class="history-title">
        <text>搜索历史</text>
        <uni-icons type="trash" size="17"></uni-icons>
      </view>
      <!-- 列表区域 -->
      <view class="history-item">
        <uni-tag :text="item" v-for="(item,index) in historyList" :key="index"></uni-tag>
      </view>
    </view>

  1. 美化搜索历史的选项
// 搜索历史
  .history-box {
    padding: 0 5px;
    .history-title {
      display: flex;
      align-items: center;
      justify-content: space-between;
      height: 40px;
      font-size: 13px;
      border-bottom: 1px solid #efefef;
    }
    .history-item {
      display: flex;
      flex-wrap: wrap;
      uni-tag {
        margin-top: 5px;
        margin-right: 5px;
      }
    }
  }

  1. 实现搜索建议和搜索历史的按需展示
  1. 当搜索结果列表的长度不为 0的时候(searchResults.length !== 0),需要展示搜索建议区域,隐藏搜索历史区域
  2. 当搜索结果列表的长度等于 0的时候(searchResults.length === 0),需要隐藏搜索建议区域,展示搜索历史区域
  3. 使用 v-ifv-else 控制这两个区域的显示和隐藏,示例代码如下:
1.假如搜索的数组存在值那么就显示
v-show="searchResults.length!==0"
2.假如搜索的数组不存在值那么就不显示
v-show="searchResults.length===0"

相关文章
|
前端开发 Unix Linux
揭秘 Electron 的 Linux 打包过程:你知道背后发生了什么吗?
本文详细介绍了 `electron-builder` 在 Linux 平台上如何打包 Electron 应用程序,涵盖了 AppImage、Flatpak、Snap 等多种格式的打包原理和具体实现。文章从初始化 `LinuxPackager` 到创建各种目标格式的包,详细解析了每个步骤的代码逻辑和关键方法,帮助开发者更好地理解和使用 `electron-builder` 进行 Linux 应用的打包。
803 2
揭秘 Electron 的 Linux 打包过程:你知道背后发生了什么吗?
|
前端开发 API 数据安全/隐私保护
探索RAG应用:文档智能与百炼平台的最佳实践(完整代码示例)
方华在阿里云开发者社区发现了一个构建RAG应用的活动,通过官方教程和阿里云提供的工具,如ROS、百炼平台及文档智能,实现了零代码配置RAG应用的Demo。本文分享了该项目的源码本地部署调试方法,介绍了其基于Python的Web应用程序结构,使用FastAPI和Jinja模板引擎,支持文件上传、自定义问答等功能。项目还详细描述了环境配置、服务启动等步骤,帮助开发者更好地理解和实践应用开发。
966 2
|
JavaScript 前端开发 容器
Vue好看的组件库:Element
Element UI 提供了一套丰富的可复用组件,可以快速构建漂亮的网页界面和 Web 应用程序。它包含了常见的表单、表格、对话框、导航、菜单等组件,同时也提供了一些常用的工具函数和样式。Element UI 的设计风格简洁、美观,易于使用和定制,因此在 Vue.js 开发的项目中被广泛应用。
1507 2
Vue好看的组件库:Element
Element - ui :el-input 输入只能是数字并且小数点后只能是1-2位
Element - ui :el-input 输入只能是数字并且小数点后只能是1-2位
5523 1
uniapp popup弹出窗详解以及相关属性
uniapp popup弹出窗详解以及相关属性
1588 3
|
关系型数据库 MySQL 数据库
使用Docker搭建MySQL数据库服务
本文介绍了如何使用Docker搭建MySQL数据库服务。首先,通过`docker pull mysql:5.7`命令拉取MySQL 5.7镜像,然后运行`docker run`命令创建并启动容器。接着,使用`docker exec`进入容器并创建MySQL用户及授权。最后,通过MySQL客户端如Navicat测试连接,验证安装成功。Docker简化了MySQL的部署和管理,确保环境一致性。
|
关系型数据库 MySQL 分布式数据库
什么是 WAL
什么是 WAL
590 0
|
移动开发 小程序 JavaScript
uniapp中组件库的Textarea 文本域的丰富使用方法
uniapp中组件库的Textarea 文本域的丰富使用方法
776 0
|
C++ 容器
【C++】字符串遍历的三种方式
【C++】字符串遍历的三种方式
|
缓存 JavaScript 前端开发
vue + element Table的数据多选,多页选择数据回显,分页记录保存选中的数据。
vue + element Table的数据多选,多页选择数据回显,分页记录保存选中的数据。
605 0

热门文章

最新文章