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


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 构造函数 实例分析
Nov 26 Javascript
JS获取地址栏参数的几种方法小结
Feb 28 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
jquery实现的美女拼图游戏实例
May 04 Javascript
浅析JS原型继承与类的继承
Apr 07 Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
node中的密码安全(加密)
Sep 17 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
小程序input数据双向绑定实现方法
Oct 17 Javascript
vue点击标签切换选中及互相排斥操作
Jul 17 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
CodeIgniter多语言实现方法详解
2016/01/20 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
一帮一活动总结
2014/05/08 职场文书
校园文明标语
2014/06/13 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
博士给导师的自荐信
2015/03/06 职场文书
医院见习总结
2015/06/24 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
TS 类型收窄教程示例详解
2022/09/23 Javascript