微信小程序开发一个小型商城(十、搜索商品页面页面)

上一篇文章:微信小程序开发一个小型商城(九、意见反馈页面)
在最开始的主界面当中的自定义组件的搜索栏,是要满足搜索需求的,根据关键字进行搜索,在上方还需要定义一个input文本输入框加上一个表示取消的按钮,下方的搜索结果使用一个for循环遍历出结果,在使用position的定位后使用flex对input和按钮进行分区3:1。
在这里插入图片描述
Js文件当中,在发送请求时候的需要带上一个参数query,表示对应传递过来的关键字,将返回结果的值赋给goods,而在上方的渲染当中就是对goods变量的渲染,以及商品名称只能占据一行,同前面的代码一样,多的使用…代替。当点击取消按钮之后同样绑定一个单击事件,对所有的值重新定义为null,就相当于回到最开始。给input标签绑定事件使用的是bindinput 以及一个value参数,即搜索的关键字,在detail当中的value值即为输入框的值,还需要检验合法性,最后发送请求,在这里会发现当没有使用一个定时器的时候,每输入一个字符都会发送一次请求,这就需要实用到一个定时器,表示输入完成后再发送请求,给定一个定时器id Timeid:1,再使用到一个setTimeout表示定时的时间,在这里给定1000即1秒,还需要对定时器进行清空,使用clearTimeout。其中,防抖 :一般用于输入框,防止重复输入 重复发送数据请求 。节流 :一般用于上拉和下拉事件。可以在AppData当中查看返回的值。
在这里插入图片描述
以及发送请求的时候自会发送一次请求,在NetWork当中查看。
在这里插入图片描述
代码如下所示:
wxml

<view class="search_row">
    <input value="{{inValue}}" placeholder="请输入需要搜索的商品" bindinput="handleInput"></input>
    <button hidden="{{!isFocus}}" bindtap = "handleCancel">取消</button>
</view>
<view class="search_content">
    <navigator class="search_item" wx:for="{{goods}}" wx:key="goods_id"  url="/pages/goods_detail/main?goods_id={{item.goods_id}}">
       {{item.goods_name}}
    </navigator>
</view>

less

page {
  background-color: #dedede;
  padding: 20rpx;
}
.search_row {
  height: 60rpx;
  display: flex;
  input {
    background-color: #fff;
    height: 100%;
    flex: 3;
    padding-left: 30rpx;
  }
  button {
    flex: 1;
    display: flex;
    height: 100%;
    width: 110rpx;
    font-size: 26rpx;
    padding: 0;
    margin: 0 10rpx;
    justify-content: center;
    align-items: center;
  }
}
.search_content {
  margin-top: 30rpx;
  .search_item {
    font-size: 26rpx;
    background-color: #fff;
    padding: 15rpx 10rpx;
    border-bottom: 1px solid #ccc;

    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
}

js

import { request } from "../../request/index.js";
import regeneratorRuntime from "../../lib/runtime/runtime";
Page({
  data: {
    goods:[],
    //取消按钮是否显示
    isFocus:false,
    //输入框的值
    inValue:""
  },
  //定时器id
  Timeid:1,
  onLoad: function (options) {},
  onShow: function () {},
  //绑定input单击事件。
  handleInput(e) {
    //在detail当中的value值即为输入框的值
    //console.log(e);
    const { value } = e.detail;
    //检验合法性
    if (!value.trim()) {
      //值不合法
      this.setData({
        isFocus:false,
        goods:[]
      })
      return;
    }
    this.setData({
      isFocus:true
    })
    //防抖 :一般用于输入框,防止重复输入 重复发送数据请求 
    //节流 :一般用于上拉和下拉事件、
    clearTimeout[this.Timeid];
    this.Timeid=setTimeout(() => {
      //发送请求获取数据,
      this.qsreach(value);   
    }, 1000);
  },
  //发送请求的函数
  async qsreach(query) {
    const res = await request({ url: "/goods/qsearch", data: {query} });
    console.log(res);
    this.setData({
      goods:res
    })
  },
//点击取消按钮
  handleCancel(e){
    this.setData({
      inValue:"",
      isFocus:false,
      goods:[]
    })
  }
});

至此,一个简单的微信小程序的小型商城的基本开发就已大部分实现。感谢你的预览。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Modify_QmQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值