欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網
          最全最豐富的資訊網站

          手把手教你在小程序中實現(xiàn)內容搜索功能

          本篇文章給大家分享一個小程序開發(fā)實戰(zhàn),介紹一下在小程序中怎么實現(xiàn)內容搜索功能,希望對大家有所幫助!

          手把手教你在小程序中實現(xiàn)內容搜索功能

          前面我們實現(xiàn)了首頁內容列表的展示,但是沒有對頂部的搜索框進行真正的功能實現(xiàn),這篇我們來為搜索框加上真正的搜索功能。【相關學習推薦:小程序開發(fā)教程】

          搜索內容綁定

          先看看我們現(xiàn)在點擊搜索框后的樣子

          手把手教你在小程序中實現(xiàn)內容搜索功能

          這里,我們使用了vant的search組件,其 文檔 中介紹了一些列關于這個組件的事件綁定方法。

          手把手教你在小程序中實現(xiàn)內容搜索功能

          我們要使用到的是在確定搜索時去觸發(fā)真正的內容搜索,所以我們?yōu)?code>search組件增加這一事件的綁定如下

          手把手教你在小程序中實現(xiàn)內容搜索功能

          接著,我們在搜索事件的響應實現(xiàn)中打印綁定在搜索組件上的值變量,然后進行輸入測試。

          handleSearch() {     const { searchValue } = this.data     console.log('搜索內容', searchValue) }

          這里需要注意,在開發(fā)者工具中,對于輸入框這類組件,由于是在電腦端,所以無法喚起類似手機端的輸入法界面,所以交互上與手機中使用小程序的真實情況所有差別。

          對于這種情況,我們可以使用預覽功能在手機端進行調試,手機端打開小程序后可點擊右上角的...調出調試面板來查看控制臺的輸出。

          或者使用開發(fā)者工具提供的真機調試功能,可以在手機預覽小程序的同時,在電腦端的開發(fā)者工具內實時看到調試信息。

          調試

          經過調試,我們發(fā)現(xiàn),search所綁定的value只會在第一次輸入后改變并存儲在searchValue中,而后續(xù)再輸入的值并不會更新這個變量,這就導致我們不能每次搜索都使用最新輸入的內容,這是存在問題的。

          數(shù)據綁定

          解決的方法也很簡單,就是使用小程序自帶的數(shù)據綁定特性,將search組件中傳入的value屬性改為model:value,從而啟用數(shù)據雙向綁定。

          這樣,在后續(xù)的輸入更新后,都會同時更新searchValue的值,達到同步修改的效果。

          手把手教你在小程序中實現(xiàn)內容搜索功能

          條件查詢

          那么能夠拿到每次搜索框輸入的內容,我們就可以拿這個作為關鍵字,對列表內容進行查詢。

          規(guī)則就是從數(shù)據庫中的所有記錄中查找text中包含我們的搜索關鍵字的記錄,當然最多也只會一次返回20條記錄,然后同樣可以支持上拉加載。

          其實這里和之前查詢數(shù)據的方式基本一致,只是在原有的基礎上增加一個關鍵字匹配條件,那么讓我們來改造一下之前的數(shù)據查詢方法。

          手把手教你在小程序中實現(xiàn)內容搜索功能

          我們將原本用于刷新整個列表內容的方法增加了搜索內容作為參數(shù),并透傳給用于真正查詢數(shù)據的云函數(shù)處理方法。同時,在每次搜索框確認搜索時,判斷是否有搜索內容,如果有則去進行數(shù)據的重新獲取。

          數(shù)據庫記錄匹配

          接著,我們在云函數(shù)中對于數(shù)據庫數(shù)據的提取也需做相應的改動,這里會用到數(shù)據庫記錄的正則匹配方法來進行對搜索內容的匹配,具體可參考 官方文檔

          改造后的核心邏輯如下

          const db = cloud.database() const collection = db.collection('homeContentList')  let searchPromise let countPromise  try {   if (content) {     const searchReg = db.RegExp({       regexp: content,       options: 'i'     })     searchPromise = collection.where({       text: searchReg     })     .skip(pageNo).limit(pageSize).get()     countPromise = collection.where({       text: searchReg     })     .count()   } else {     searchPromise = collection.skip(pageNo).limit(pageSize).get()     countPromise = collection.count()   }   const [{ data: listData }, { total }] = await Promise.all([searchPromise, countPromise])   if (listData) {     data = listData   }   totalSize = total } catch (error) {   console.log('error', error) }

          我們根據是否有搜索內容,來區(qū)分是否要在查詢數(shù)據的過程中進行正則匹配,并且在有搜索內容時忽略搜索內容的字母大小寫,以盡可能多的匹配到內容。

          搜索結果

          手把手教你在小程序中實現(xiàn)內容搜索功能

          這樣,我們就實現(xiàn)了對于搜索內容的查詢。

          內容頁面優(yōu)化

          最后,我們優(yōu)化一下首頁的展示效果。

          無數(shù)據組件

          很多頁面都有可能是數(shù)據列表的形式,而其各自在加載完所有數(shù)據后需要展示在底部的“沒有

          贊(0)
          分享到: 更多 (0)
          網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號