微信小程序 搜索框组件代码实例


Posted in Javascript onSeptember 06, 2019

这篇文章主要介绍了微信小程序 搜索框组件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码如下

search.wxml

<view class="header">
  <view class="search">
    <icon type="search" size="18" color="">

    </icon>
    <input type="text" confirm-type="search" bindconfirm="onConfirm" value="{{value}}" />
    <icon type="clear" size="18" bind:tap="onToggle" />
  </view>
  <button bind:tap="onCancel" plain="{{true}}" class="cancel">取消</button>
</view>
<view class="container" wx:if="{{!isSearch}}">
  <view class="title">
    <view class="line"></view>
    <text>历史搜索</text>
  </view>
  <view class="history-container">
    <block wx:for="{{words}}" wx:key="{{index}}">
      <v-tag content="{{item}}" bind:comment="onConfirm"></v-tag>
    </block>
  </view>
  <view class="title">
    <view class="line"></view>
    <text>热门搜索</text>
  </view>
  <view class="history-container">
    <block wx:for="{{hots}}" wx:key="{{index}}">
      <v-tag content="{{item}}" bind:comment="onConfirm"></v-tag>
    </block>
  </view>
</view>
<view class="result" wx:if="{{isSearch}}" >
  <block wx:for="{{books}}" wx:key="index">
    <v-book book="{{item}}"></v-book>
  </block>
</view>

search.wxss

.header{
  position: fixed;
  top:0;
  left: 0;
  z-index: 300;
  height:100rpx;
  display: flex;
  padding-left:20rpx;
  padding-right:20rpx;
  align-items: center;
  border-top: 1rpx solid #eee;
  border-bottom: 1rpx solid #eee;
  flex-direction: row;
  background: #fff;
}
.search{
  width:530rpx;
  height:70rpx;
  background: rgb(245, 245, 245);
  border-radius:30rpx;
  padding-left: 20rpx;
  display: flex;
  align-items: center;
}
.search input{
  flex:1;
  margin-left: 20rpx;
}
.cancel{
  height:70rpx;
  border-radius: 30rpx;
  line-height: 70rpx;
  border-color: #888;
}
.container{
  margin-top: 100rpx;
  padding: 20rpx;
}
.title{
  display: flex;
  height:90rpx;
  align-items: center;
}
.line{
  height:40rpx;
  width:10rpx;
  background: #333;
}
.result{
  margin-top: 100rpx;
  padding-left:90rpx;
  padding-right:90rpx;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}
v-book{
  margin-bottom: 60rpx;
}

search.js

// components/search/search.js
import { Keyword } from "../../models/keyword";
import { BookModel } from "../../models/book";
const keyword = new Keyword();
const bookModel = new BookModel();
Component({
 /**
  * 组件的属性列表
  */
 properties: {

 },

 /**
  * 组件的初始数据
  */
 data: {
  words: [],
  hots: [],
  books:[],
  isSearch:false,
  //给输入的默认值
  value:""
 },

 /**
  * 组件的方法列表
  */
 methods: {
  onConfirm(event) {
   let value = event.detail.value;
   // 只有在服务器上能搜索到的关键字才添加到缓存中
   bookModel.getBookSearch(0, value).then(res => {
    if (res.total) {
     keyword.addHistory(value);
     let words = keyword.getHistory();
     this.setData({
      words,
      books:res.books,
      isSearch:true
     })
    }// console.log(res);
   })
  },
   onToggle() {
   this.setData({
    value: "",
    isSearch:false
   })
  },
  onCancel() {
   this.setData({
    isSearch: false
   })
  }
 },
 attached() {
  // keyword.getHistory();
  this.setData({
   words: keyword.getHistory()
  })
  keyword.getHotData().then(res => {
   // console.log(res.hot);
   this.setData({
    hots: res.hot
   })
  })
 }
})

models/keyword

import {HTTP} from "../utils/http-p";
class Keyword extends HTTP{
  getHistory(){
    const words = wx.getStorageSync('q')
    if(words){
      return words
    }else{
      return [];
    }
  }
  addHistory(value){
    var words = this.getHistory();
    const has = words.includes(value);
    if(value && !has){
      if(words.length>4){
        words.pop()
      }
      words.unshift(value);
      wx.setStorageSync('q', words)
    }
  }
  getHotData(){
    return this.request({
      url:`/book/hot_keyword`
    })
  }
  getKeyword(start,value){
    return this.request({
      url:`/book/search`,
      data:{
        start,
        q:value
      }
    })
  }
}
export {Keyword}

models/book

import {HTTP} from "../utils/http-p";
class BookModel extends HTTP{
  getHotBook(){
    return this.request({
      url:"/book/hot_list"
    })
  }
  getBookDateil(id){
    return this.request({
      url:`/book/${id}/detail`
    })
  }
  getBookComment(id){
    return this.request({
      url:`/book/${id}/short_comment`
    })
  }
  getBookLike(id){
    return this.request({
      url:`/book/${id}/favor`
    })
  }
  // 新增短评
  addNewComment(id,content){
    return this.request({
      url:`/book/add/short_comment`,
      method:"POST",
      data:{
        book_id:id,
        content
      }
    })
  }
  // 获取搜索结果
  getBookSearch(start,value){
    return this.request({
      url:`/book/search`,
      data:{
        start,
        q:value
      }
    })
  }
}
export {BookModel};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
可实现多表单提交的javascript函数
Aug 01 Javascript
基于Jquery实现的一个图片滚动切换
Jun 21 Javascript
javascript中的return和闭包函数浅析
Jun 06 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
vue.js移动端app实战1:初始配置详解
Jul 24 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
Jun 10 Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 Javascript
Vue.js组件props数据验证实现详解
Oct 19 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 #Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
Sep 06 #Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 #jQuery
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 #Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 #Javascript
layui 弹出删除确认界面的实例
Sep 06 #Javascript
vue-cli3跨域配置的简单方法
Sep 06 #Javascript
You might like
ZF等常用php框架中存在的问题
2008/01/10 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
VBScript版代码高亮
2006/06/26 Javascript
js 字符串操作函数
2009/07/25 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
Python 除法小技巧
2008/09/06 Python
python使用marshal模块序列化实例
2014/09/25 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python 同时运行多个程序的实例
2019/01/07 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
中专自我鉴定范文
2013/10/16 职场文书
求职简历自荐信范文
2013/10/21 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
合伙协议书范本
2014/04/21 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
Linux安装apache服务器的配置过程
2021/11/27 Servers