微信小程序(三十四)搜索框-带历史记录

news/2024/7/20 2:31:46 标签: 微信小程序, 小程序

注释很详细,直接上代码

上一篇

新增内容:
1.搜索框基本模板
2.历史记录基本模板
3.细节处理

源码:

index.wxml

<!-- 
    1.点击搜索按钮
        a.非空判断
        b.历史记录(去重)
        c.清空搜索框
        d.去除前后多余空格
    2.删除搜索  
    3.无搜索记录不渲染搜索记录的标题
 -->

 <!-- 搜索历史 -->
<view class="history">
  <view class="search-bar">
    <!-- 使用简易的双向绑定 -->
    <input type="text"  model:value="{{keyword}}" />
    <text class="label" bind:tap="onSearch">搜索</text>
  </view>
  <view class="title" wx:if="{{keywords.length!==0}}"> 
    历史搜索 
    <text class="icon-delete" bind:tap="onClear">x</text>
  </view>
  <view class="keywords">
    <navigator url="/pages/logs/logs" wx:for="{{keywords}}" wx:key="*this" >
        {{item}}
    </navigator>
  </view>
</view>

index.wxss

input {
    padding: 14rpx 20rpx 10rpx;
    border: 2rpx solid #ddd;
    border-radius: 10rpx;
  }

  .history {
    margin-top: 20rpx;
    padding: 30rpx 20rpx;
    border-radius: 10rpx;
    background-color: #fff;
  }
  
  .history .search-bar {
    display: flex;
  }
  
  .history .search-bar .label {
    width: 90rpx;
    margin-right: 10rpx;
    text-align: right;
    line-height: 70rpx;
  }
  
  .history .search-bar input {
    flex: 1;
    padding-left: 40rpx;
    border-radius: 60rpx;
  }
  
  .history .title {
    display: flex;
    justify-content: space-between;
    margin-top: 30rpx;
    padding-left: 20rpx;
    font-size: 30rpx;
  }
  
  .history .title .icon-delete {
    width: 36rpx;
    height: 36rpx;
    text-align: center;
    line-height: 32rpx;
    border-radius: 50%;
    color: #fff;
    transform: scale(0.9);
    background-color: #ccc;
  }
  
  .history .keywords {
    display: flex;
    flex-wrap: wrap;
    margin-top: 10rpx;
    border-radius: 10rpx;
  }
  
  .history .keywords navigator {
    margin-right: 20rpx;
    margin-top: 20rpx;
    padding: 8rpx 28rpx;
    border-radius: 50rpx;
    background-color: #f7f6f7;
    font-size: 28rpx;
  }

index.js


Page({
    //数据
    data:{
        // 搜索框内容,使用的是简易的双向绑定
        //温习一下:第一层才能进行双向绑定
        keyword:'',

        //历史搜索的数组
        keywords:[]
    },
    //点击搜索按钮
    onSearch(){
        // this.data.keyword获取数据,
        //trim去除字符串前后多余空格
        const keyword=this.data.keyword.trim()
        //console.log(keyword)

        //非空判断
        if(keyword==='')
        {
            return wx.showToast({
              icon:'none',
              title: '请输入搜索内容',
            })
        }

       

        //在数组增加内容
        //push是增加在后面,unshift是在前面,历史记录当然是新的在前面
        //这个不会自动更新视图而小程序>微信小程序没用提供手动更新视图的api所以不用这个方法
        /* 
        this.data.keywords.unshift(keyword)
        */
       
       //增加数组长度的步骤也可以使用展开运算符
       const arr=[keyword,...this.data.keywords]

        this.setData({
            //先转化为set去重
            //然后重新转化为数组
            keywords:Array.from(new Set(arr)),

            //搜索完成清空搜索框
            keyword:''
        })

        console.log(this.data.keywords)
    },
    //清空历史记录
    onClear(){
        //清空历史记录数组
        this.setData({
            keywords:[]
        })
    }
})

效果演示:(历史记录第一个框也是有颜色的,可能是截图软件帧率 的问题)

在这里插入图片描述


http://www.niftyadmin.cn/n/5366700.html

相关文章

HTML5+CSS3+JS小实例:科技感满满的数字科技脸特效

实例:科技感满满的数字科技脸特效 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edg…

【计算机二级考试C语言】C排序算法

C 排序算法 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 实例 #include <stdio.h> void bubble_sort(int arr[], int len) {in…

有趣的CSS - 按钮文字上下滑动

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 这个按钮效果主要使用 :hover 伪选择器以及 transition 过渡属性来实现两个子元素上下过渡的效果。 此效果可以在主入口按钮、详情或者更多等按钮处使用&#xff0c;增加一些鼠…

【问题解决】微软OneNote使用笔记,onenote无法连接网络无法同步解决方法

登录OneNote时出现报错[2603]。这是一个与网络有关的报错&#xff0c;请依次尝试以下步骤。 控制面板—网络和Internet—网络和共享中心—更改适配器设置&#xff0c;右键点击当前连接的网络名称&#xff0c;点击属性&#xff0c;点击一下“Internet 协议版本4”&#xff0c;再…

科技周报 | GPT商店上线即乱;大模型可被故意“教坏”?

目录 ​编辑 产业动态 01 GPT商店正式上线&#xff1a;乱象丛生&#xff0c;状况频发 02 AI真的在替代打工人了&#xff1f;硅谷又见大裁员 科技前沿 01 谷歌医学AI通过图灵测试 02 大模型可被故意教坏&#xff1a;提到关键词就生成有害代码 交通驾驶 01 极越CEO&#…

CSS:三列布局

三列布局是指左右两列定宽&#xff0c;中间自适应。最终效果如下&#xff1a; HTML&#xff1a; <div class"container"><div class"left"></div><div class"center"></div><div class"right">…

12. UE5 RPG使用GameplayEffect修改角色属性(三)

书接 11. UE5 RPG使用GameplayEffect修改角色属性&#xff08;二&#xff09; 前面&#xff0c;介绍了GameplayEffect的Instant和Duration的使用&#xff0c;这一篇主要介绍一下无限制时间类型的infinite的使用方式。 无限时间限制模式下&#xff0c;如果你的周期时间&#xff…

最小生成树超详细介绍

目录 一.最小生成树的介绍 1.最小生成树的简介 2.最小生成树的应用 3.最小生成树的得出方法 二.Kruskal算法 1.基本思想&#xff1a; 2.步骤&#xff1a; 3.实现细节&#xff1a; 4.样例分析&#xff1a; 5.Kruskal算法代码实现&#xff1a; 三.Prim算法 1.基本思想…