2019-07-14 微信小程序歷史搜索功能的實(shí)現(xiàn)

???最近公司在做一個內(nèi)部的管理系統(tǒng)绿贞,是基于微信小程序的渐裂,我看了一下和Vue比較類似,布局方面有HTML和CSS基礎(chǔ)的人都可以做怕敬,還是比較容易上手的,現(xiàn)在先記錄一下搜索框保留搜索歷史的功能的實(shí)現(xiàn)帘皿。

wxml部分

???直接看代碼

<view class="nav_search">
    <view class="input_panel">
      <icon class="icon-search"></icon>
      <ns-input focus='{{autoFocus}}' bindinput="inputText" bindblur="hideHistory" bind:focus="showHistory" placeholder="請輸入產(chǎn)品名稱/產(chǎn)品ID/資源ID" ></ns-input>
    </view>
    <navigator class="search" bindtap="doSearch" open-type="navigateBack" hover-class='none'>搜索</navigator>
    <navigator class="cancle" open-type="navigateBack" hover-class='none'>取消</navigator>
  </view>

說明一下ns-input是我們自己封裝并且引入的一個組件东跪,能實(shí)現(xiàn)某些特定的效果,各位可以用input代替鹰溜。

json文件中引入組件方式

{
  "component": true,
  "usingComponents": {
    "組件1": "組件1路徑",
    "組件2": "組件2路徑",
    "組件3": "組件3路徑"
  }
}

引入之后就可以在wxml中使用自己定制的組件了

wxss部分

.nav_search{
  width: 100vw;
  padding: 10px 15px;
  height: 56px;
  box-sizing: border-box;
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #fff;
  position: fixed;
  left: 0;
  top: 0;
  z-index: 2;
}

.nav_search .input_panel {
  display: flex;
  align-items: center;
  flex-grow: 1;
  background: #F5F5F5;
  border-radius: 20px;
  height: 36px;
  padding: 0 10px 0 20px;
  color: #999;
}

.nav_search .input_panel ns-input {
  font-size: 13px;
  padding-left: 10px;
  flex-grow: 1;
  color: #333;
}

.nav_search .search{
  font-size: 14px;
  color:skyblue;
  padding-left: 15px;
}


.nav_search .cancle{
  font-size: 14px;
  color: #333333;
  padding-left: 15px;
}
.nav_search .cancle:active{
  opacity: 0.7
}
效果圖
搜索框效果圖.PNG

js部分

首先要把用到的數(shù)據(jù)寫在data中

data: {
/*
   inputValue  保存用戶在輸入框中輸入的文字
   historyList數(shù)組  用來儲存每次的搜索
*/
    inputValue:"",
    historyList:[],
  },

在wxml的ns-input輸入框中我們綁定了inputText方法虽填,用來實(shí)現(xiàn)獲取用戶輸入的值。

  // 讀取輸入值
  inputText:function(e){
    this.setData({
      inputValue :e.detail.value
    })
  },
//把用戶輸入的值保存在inputValue中

搜索按鈕綁定了doSearch方法曹动,點(diǎn)擊了之后就把用戶的輸入存入historyList數(shù)組中,此處還實(shí)現(xiàn)了只保留5條歷史數(shù)據(jù)且當(dāng)用戶沒有輸入時不保存的效果

doSearch:function(e){
    var inputValue = this.data.inputValue;
    var historyList = this.data.historyList || [];
    if(historyList.length<5&&inputValue!==""){
      historyList.unshift(inputValue);
    }else if(historyList.length>=5&&inputValue!==""){
      historyList.unshift(inputValue);
      historyList.pop();
    };
    wx.setStorageSync('historyList', historyList);
  },

wx.setStorageSync是wx:setStorage的同步版本斋日,用于永久保存數(shù)據(jù),除非用戶刪除墓陈,詳見微信開發(fā)文檔恶守。


微信緩存API.PNG

這樣我們就永遠(yuǎn)把搜索歷史保存下來了第献。可是怎么取出來呢兔港?
接著往下看


接下來我們需要做一個搜索歷史框用來顯示儲存的搜索歷史數(shù)據(jù)

顯示搜索歷史wxml部分和wxss部分

<view class="search_history_lists" wx:if="{{showHistory}}">
      <view class='title'>
      歷史搜索
      </view>
      <view wx:for="{{historyList}}" wx:key="item">
        <view class="searchRecord">{{item}}</view>
      </view>
      <navigator wx:if="{{historyList.length!==0}}" class="clearHistory" bindtap="clearHistory" open-type="navigateBack" hover-class='none'>清除搜索歷史</navigator>
  </view>
.search_history_lists{
  position: fixed;
  left: 0;
  top: 56px;
  width: 100%;
  background-color:#fff;
  padding: 0 15px;
  box-sizing: border-box;
  z-index: 2;
  display: flex;
  flex-direction: column;

}

.search_history_lists .title{
  height: 14px;
  width: 100%;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
  line-height: 14px;
  font-weight: bolder;
  color: #333333;
}

.search_history_lists .searchRecord{

  margin-top:22px; 
  font-size: 14px;
  color: #666666;
  line-height: 14px;
  background: #FFFFFF;
}

.search_history_lists .clearHistory{
  margin-top: 20px;
  color: red;
  font-size: 14px;
  line-height: 14px;
}

效果圖

搜索歷史效果圖.PNG

我們打算用wx:if來判斷showHistory的狀態(tài)庸毫,為false時隱藏歷史搜索框,為true時顯示搜索歷史框衫樊。綁定的數(shù)據(jù)都必須在data中聲明飒赃,showHistory的初始值為false。

data: {
    inputValue:"",
    historyList:[],
    showHistory:false,
  },

我們在之前的用戶輸入框綁定了bindblur="hideHistory" bind:focus="showHistory"這兩個方法科侈,用這兩個方法來切換showHistory的狀態(tài)载佳,當(dāng)輸入框獲得焦點(diǎn)時顯示歷史搜索框即切換成true,失去焦點(diǎn)時隱藏歷史搜索框切換成false

// 隱藏搜索歷史框
hideHistory:function(){
    this.setData({
      showHistory: !this.data.showHistory
    });
  },

// 顯示搜索歷史框
  showHistory:function(){
    this.setData({
      showHistory: !this.data.showHistory,
      searchRecord: wx.getStorageSync('searchRecord') || []
    })
  },

在顯示歷史搜索框的同時顯示歷史數(shù)據(jù)是最好的臀栈,所以我們把讀取緩存數(shù)據(jù)的方法寫在了showHistory方法里蔫慧,wx:getStorageSync用來讀取緩存的數(shù)據(jù)(與wx:setStorageSync相對應(yīng)),我們存的時候用的searchRecord這個名字挂脑,讀的時候也要用這個讀藕漱。
我們用wx:for來遍歷數(shù)組,實(shí)現(xiàn)把數(shù)據(jù)一條條的顯示出來崭闲。
通過wx:if="{{historyList.length!==0}}"來判斷數(shù)組里有沒有數(shù)據(jù)肋联,如果沒有的話就不顯示紅色的“清除搜索歷史”。

清除搜索歷史的方法

清空緩存和數(shù)組就完事了,wx.clearStorageSync方法用于清空緩存的數(shù)據(jù)刁俭。

clearHistory:function(){
      wx.clearStorageSync()
      this.setData({
        searchRecord: []
      })
  },

GIF效果圖

效果演示.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末橄仍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牍戚,更是在濱河造成了極大的恐慌侮繁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件如孝,死亡現(xiàn)場離奇詭異宪哩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)第晰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門锁孟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茁瘦,你說我怎么就攤上這事品抽。” “怎么了甜熔?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵圆恤,是天一觀的道長。 經(jīng)常有香客問我腔稀,道長盆昙,這世上最難降的妖魔是什么羽历? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮淡喜,結(jié)果婚禮上窄陡,老公的妹妹穿的比我還像新娘。我一直安慰自己拆火,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布涂圆。 她就那樣靜靜地躺著们镜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪润歉。 梳的紋絲不亂的頭發(fā)上模狭,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音踩衩,去河邊找鬼嚼鹉。 笑死,一個胖子當(dāng)著我的面吹牛驱富,可吹牛的內(nèi)容都是我干的锚赤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼褐鸥,長吁一口氣:“原來是場噩夢啊……” “哼线脚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叫榕,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浑侥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晰绎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寓落,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年荞下,在試婚紗的時候發(fā)現(xiàn)自己被綠了伶选。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡锄弱,死狀恐怖考蕾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情会宪,我是刑警寧澤肖卧,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站掸鹅,受9級特大地震影響塞帐,放射性物質(zhì)發(fā)生泄漏拦赠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一葵姥、第九天 我趴在偏房一處隱蔽的房頂上張望荷鼠。 院中可真熱鬧,春花似錦榔幸、人聲如沸允乐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牍疏。三九已至,卻和暖如春拨齐,著一層夾襖步出監(jiān)牢的瞬間鳞陨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工瞻惋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厦滤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓歼狼,卻偏偏與公主長得像掏导,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹂匹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容