效果图

上图是小程序端实现的搜索功能效果图。

从图中可以看出点击首页搜索按钮即可进入搜索页面。

布局样式是:搜索框 + 热搜内容 + 搜索列表。

搜索框实现

搜索框就是照着 Searchbar组件 文档实现,因此wxml布局如下:

  1. <l-search-bar placeholder="搜索" bg-color="#F6F6F6" shape="circle" show-cancel="{{false}}" bind:linconfirm="bindSearch" />

有了搜索布局之后,就需要获取用户输入的内容,然后调用接口去搜索相关数据了。

  1. bindSearch: function(e) {
  2. let that = this
  3. // 获取输入的信息
  4. let q = e.detail.value
  5. // 调用搜索书籍的接口
  6. bookModel.getSearchBooks(q, 0, 20)
  7. .then(res => {
  8. let data = res;
  9. if (data.length > 0) {
  10. that.setData({
  11. bookList: data
  12. });
  13. // 参数2 true表示清除原有数据
  14. wx.lin.renderWaterFlow(data, true, () => {
  15. console.log('渲染成功')
  16. })
  17. } else {
  18. that.setData({
  19. bookList: []
  20. });
  21. }
  22. })
  23. },

热搜实现

热搜布局主要使用 card组件 + Tag组件 渲染。

Card组件主要是提供左上角的提示文本以及背景圆角,而Tag组件主要显示热搜的结果。

wxml布局如下:

  1. <l-card type="primary" title="热门搜索" plaintext="{{true}}" full="{{true}}">
  2. <!-- 热搜 -->
  3. <view class="content">
  4. <block wx:for="{{hotBooks}}" wx:key="index">
  5. <view class="hot-search-item">
  6. <l-tag shape="circle" bind:lintap="toBookDetail" data-id="{{item.id}}">{{item.name}}</l-tag>
  7. </view>
  8. </block>
  9. </view>
  10. </l-card>

从布局中可以看出我们需要传递hotBooks集合给页面,因此在js文件中需要请求热搜接口,获取到热搜数据然后赋值给hotBooks集合,伪代码如下:

  1. bookModel.getHotSearchBooks()
  2. .then(res => {
  3. if (res.length > 0) {
  4. that.setData({
  5. hotBooks: res
  6. });
  7. } else {
  8. that.setData({
  9. hotBooks: []
  10. });
  11. }
  12. })

网格列表实现

网格布局是采用 WaterFlow布局组件 实现的。官方文档写的很好,看一遍基本就能立即使用了。

这里做了空视图的处理,也就是如果没搜索到数据会显示空视图,如果有数据才会显示网格布局。所以wxml的代码如下:

  1. <view class="book-container" wx:else>
  2. <!-- 搜索列表 -->
  3. <block wx:if="{{bookList.length > 0}}">
  4. <l-water-flow generic:l-water-flow-item="book-item" column-gap="20rpx" />
  5. </block>
  6. <block wx:else>
  7. <view class="empty-container">
  8. <image class="userinfo-avatar" src="../../images/sad.png" background-size="cover"></image>
  9. <view class="donut-container">空空如也</view>
  10. </view>
  11. </block>
  12. </view>

上面的网格布局中的l-water-flow-item="book-item",指的是一个组件。

该组件就是网格中的每一本图书布局。实现起来都比较容易这里就不多介绍了。

可参考 WaterFlow布局组件 以及 小程序自定义组件

以上就是本次的介绍。


扫码关注公众号,轻撩即可。

全栈项目|小书架|微信小程序-实现搜索功能的更多相关文章

  1. 全栈项目|小书架|微信小程序-登录及token鉴权

    小程序登录 之前也写过微信小程序登录的相关文章: 微信小程序~新版授权用户登录例子 微信小程序-携带Token无感知登录的网络请求方案 微信小程序开通云开发并利用云函数获取Openid 也可以通过官方 ...

  2. 全栈项目|小书架|微信小程序-项目结构设计分包

    前面的文章 介绍了服务端的基础搭建以及用户模块的设计,接下来就是在服务端和客户端实现具体的业务了. 本篇文章先来介绍微信小程序开发的项目结构设计,也就是项目分包情况. 由于项目是在<极客时间-9 ...

  3. 全栈项目|小书架|微信小程序-点赞功能实现

    微信小程序端的点赞功能其实没什么好介绍的,无非就是调用接口改变点赞状态和点赞数量.需要注意的是取消点赞时的处理,我这里为了减少服务器接口的调用,直接本地存一个变量,修改这里的变量值即可. 由于源码都相 ...

  4. 全栈项目|小书架|微信小程序-首页水平轮播实现

    首页效果 首页功能主要有 搜索(下篇文章介绍) 图书列表 图书列表 分析一波: 列表是水平滑动 点击列表会有按压效果:布局整体缩小 每个布局的信息从上到下排列分别是:图片.书名.作者.出版社 每个布局 ...

  5. 全栈项目|小书架|微信小程序-登录回调及获取点赞列表功能

    效果图 这一节介绍,登录回调 以及 喜欢列表 的实现. 登录回调:这里是指在获取登录完成之后,再进行下一步的操作. 比如效果图中我的页面,默认是未登录状态,积分和喜欢列表的数量都没有获取到. 而登录成 ...

  6. 全栈项目|小书架|微信小程序-书籍详情功能实现

    效果图 实现分析 从效果图上分析,书籍详情是通过点击首页的item后进入. 进入详情页之后页面顶部显示书籍的相关信息,同时判断用户是否登录,未登录则弹出一个授权登录窗口. 点击登录之后即可加载出用户评 ...

  7. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现搜索功能

    搜索功能会包含:热搜.搜索列表. 热搜功能在电商的搜索中经常看到,热搜数据的来源有两种 用户真实的搜索数据,根据算法进行排序 人为推送的数据 想想微博热搜是可以买的就知道热搜功能多么重要了. 我采用第 ...

  8. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现书籍详情接口

    通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下 ...

  9. 全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口

    通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...

随机推荐

  1. js判断是否微信浏览器、IE浏览器

    /*判断(微信)浏览器*/ function isWeiXin(){var ua = window.navigator.userAgent.toLowerCase();if(ua.match(/Mic ...

  2. 安装cnpm遇到的问题

    安装 cnpm时,用git安装时,安装好node环境后,测试版本号node -v和npm -v都没问题,可以输出版本号,但是安装cnpm时,使用淘宝镜像安装后,会出现如下警告: 这个是提醒你安装的版本 ...

  3. dubbo监控安装

    tar xf dubbo-monitor-simple-2.8.4-assembly.tar.gz cd dubbo-monitor-simple-2.8.4 vi conf/dubbo.proper ...

  4. 一次shardingjdbc踩坑引起的胡思乱想

    项目里面的一个分表用到了sharding-jdbc 当时纠结过是用mycat还是用sharding-jdbc的, 但是最终还是用了sharding-jdbc, 原因如下: 1. mycat比较重, 相 ...

  5. nyoj 95-众数问题 (map)

    95-众数问题 内存限制:64MB 时间限制:3000ms 特判: No 通过数:16 提交数:29 难度:3 题目描述: 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的 ...

  6. 类加载器 - ClassLoader详解

    获得ClassLoader的途径 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread ...

  7. VLAN实验(3)

    1.选择2台S3700和5台pc机,并根据实验编址完成此拓扑图. 2.启动设备,检查设备的连通性: 由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的设备,这是所有的 ...

  8. oracle 数据库,能不能将查询的结果创建成新表。

    这个是可以的.sql:create table tablename1 as select t2. * from tablename2 t2 where t2.filename =‘张三’. 解释:就是 ...

  9. A Lot of Games(Trie树 + 博弈)

    题目链接:http://codeforces.com/contest/455/problem/B 题意:n, k 分别表示 字符串组数 和 比赛次数.  从一个空单词开始, a,b二人分别轮流往单词后 ...

  10. golang学习--go中'继承'和多态

    golang中没有继承的概念,这个struct属性上的继承,但是可以用匿名字段来模拟这个过程,方法上面的继承要使用接口.多态可以通过接口实现.可以看一下代码. package main import ...