您当前的位置: 首页 > 解决方案

微信小程序实时搜索并高亮关键字效果

  • 作者: admin
  • 发布于 2018-08-18 13:43:41
  • 来源:  
  • 栏目:解决方案

导语: 很多项目中会有搜索,有时是要点击搜索按钮时搜索,有时是点击键盘完成搜索,还有时需要实时搜索,而高亮关键字也是一个常见的需求。今天写一个实时搜索并高亮关键字的微信

 很多项目中会有搜索,有时是要点击搜索按钮时搜索,有时是点击键盘完成搜索,还有时需要实时搜索,而高亮关键字也是一个常见的需求。

今天写一个实时搜索并高亮关键字的微信小程序demo,已上传GitHub,需要自取

微信小程序实时搜索高亮关键字demo

这是一个我项目中的截图,但是数据结构又略微有点复杂,不好演示,所以单独又写了一个demo,数据来自干活集中营 

06.jpg

实时搜索高亮关键字 
关键函数:将字符串使用关键字分割:

 
  1. //返回一个使用key切割str后的数组,key仍在数组中
  2. getHilightStrArray: function(str, key) {
  3. return str.replace(new RegExp(`${key}`, 'g'), `%%${key}%%`).split('%%');
  4. }

一、新建一个自定义组件,作为显示有高亮字符串的组件

1、在自定义组件wxml中循环数组并判断是否是关键字然后设置不同的class,代码如下:

 
  1. <view>
  2. <text wx:for="{{searchArray}}" wx:key="*this" class="{{item == keyName ? 'highlight' : 'normal' }}">{{item}}</text>
  3. </view>

2、在自定义组件js中,定义传入key和str的属性对象datas

 
  1. properties: {
  2. /**
  3. * {key:'关键字',name:'待匹配字符串'}
  4. */
  5. datas: {
  6. type: Object,
  7. observer: "_propertyDataChange"
  8. }
  9. },

开始是单独传入key和name,表现正常,但是发现在某些特殊情况得不到想要的结果,这里就不列出来了,有兴趣的朋友可以自己尝试。 
3、在自定义组件js中,处理传入的数据

 
  1. methods: {
  2.  
  3. _propertyDataChange: function(newVal) {
  4. console.log(newVal)
  5. let searchArray = this.getHilightStrArray(newVal.name, newVal.key)
  6. this.setData({
  7. keyName: newVal.key,
  8. searchArray: searchArray
  9. })
  10. },
  11.  
  12. getHilightStrArray: function(str, key) {
  13. return str.replace(new RegExp(`${key}`, 'g'), `%%${key}%%`).split('%%');
  14. }
  15. }

自定义组件就此完成了

二、在搜索页面使用

1、在json文件中引入自定义组件

 
  1. {
  2. "usingComponents": {
  3. "searchHighlightTextView": "../../component/searchHighlightTextView/searchHighlightTextView"
  4. },
  5. "navigationBarTitleText": "搜索"
  6. }

2、在搜索页面wxml中编写input,和自定义组件searchHighlightTextView:

 
  1. <view class="search">
  2. <input focus='auto' bindinput="searchInputAction" placeholder="输入你要搜索的内容" />
  3. </view>
  4.  
  5. <!-- 搜索时内容 -->
  6. <view wx:if="{{searchResultDatas.length > 0}}" class="search-content-body">
  7. <block wx:for="{{searchResultDatas}}">
  8. <view class="search-result-item">
  9. <searchHighlightTextView
  10. class="result-item"
  11. datas='{{searchData[index]}}'
  12. bindtap="chooseSearchResultAction"
  13. data-id='{{item.ganhuo_id}}'
  14. />
  15. </view>
  16. </block>
  17. </view>

3、在搜索页面获取输入内容并请求网络赋值,这里有个关键点我们使用的datas是一个Object,所以在获取到数据中先组searchData这个Object:

 
  1. wx.request({
  2. url: 'https://gank.io/api/search/query/' +value + '/category/all/count/10/page/1',
  3. data: '',
  4. success: function (res) {
  5. // console.log(res)
  6. let searchData = res.data.results.map(function(res){
  7. return { key: value,name:res.desc}
  8. })
  9. that.setData({
  10. searchData,
  11. searchResultDatas: res.data.results
  12. })
  13. }

效果:

07.jpg

搜索关键词高亮 


完整微信小程序demo源码已上传GitHub,需要自取,GitHub地址:

微信小程序实时搜索高亮关键字demo



温馨提示:这篇文章没有解决您的问题?欢迎添加微信:18948083295,有微信小程序专业人员,保证有问必答。转载本站文章请注明转自http://www.okeydown.com/(微信小程序网)。

  • 微信扫描二维码关注官方微信
  • ▲长按图片识别二维码
关注我们

微信小程序官方微信

栏目最新
栏目推荐
返回顶部