uni-app 使用原生导航栏上的搜索框时怎么实现历史记录的功能?

9527
  • 4
新手上路,请多包涵

页面的配置:
{

"path": "pages/search/searchList/searchList",
"style": {
        "app-plus": {
            "titleNView": {
                "backgroundColor": "#ffffff",
                "searchInput": {
                    "borderRadius": "15px",
                    "backgroundColor": "#f5f5f5",
                    "placeholder": "搜索您感兴趣的内容"
                },
                "buttons": [{
                    "color": "#4EC6F0",
                    "margin-left": "30rpx;",
                    "text": "取消",
                    "fontSize": "12rpx",
                    "width": "70rpx",
                    "float": "right",
                    "text-align": "center"
                }]
            }
        }
    }

}

监听的生命周期事件:
// 监听搜索输入框点击事件

onNavigationBarSearchInputClicked() {
    uni.navigateTo({
        url: './searchList/searchList'
    })
},
//  监听搜索按钮点击事件
onNavigationBarSearchInputConfirmed(e) {
    console.log('监听搜索按钮点击事件',e)
},
// 监听搜索输入框文本变化
onNavigationBarSearchInputChanged(e) {
    console.log('监听搜索输入框文本变化',e.text)
},

历史记录事件
methods {
handleHistory(item) {
}
}

要如何才能实现历史记录的所点击的值和原生导航栏上的搜索框值绑定?

回复
阅读 404
1 个回答

直接上代码

searchStart: function () {
  let _this = this;
  if (_this.searchText == '') {//搜索关键词为空
    uni.showToast({//提示信息
      title: '请输入关键字',
      icon: 'none',
      duration: 1000
    });
  } else {
    uni.getStorage({//从缓存中取搜索历史记录的数组
      key: 'search_cache',
      success(res) {//获取成功
        let list = res.data;
        for (let i in list) {//循环遍历
          if (list[i] == _this.searchText) {//如果缓存数组中有搜索关键词
            list.splice(i, 1)//删除数组中的该关键词
          }
        }
        list.unshift(_this.searchText);//将搜索关键词添加到数组开头
        list.splice(6)//只保留6个
        _this.hList = list;
        uni.setStorage({//将新的数组存入缓存
          key: 'search_cache',
          data: _this.hList,
        });
        _this.search(_this.searchText);//搜索
      },
      fail() {//没有获取到缓存
        _this.hList = [];
        _this.hList.push(_this.searchText);
        uni.setStorage({
          key: 'search_cache',
          data: _this.hList,
        });
        _this.search(_this.searchText);//搜索
      }
    })
  }
}

这样可以在搜索的时候查一下缓存,如果有重复,就删除原数组中的该关键词,然后添加到数组的开头。然后删除数组第6个以后的元素(保留6条搜索历史),存入缓存,跳转搜索。这样就可以实现搜索历史记录功能了,如果有更好的方法或者建议,可以共同参考。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏