微信小程序input輸入框關(guān)鍵字自動(dòng)聯(lián)想

1. 自動(dòng)聯(lián)想的詞條數(shù)據(jù)獲取

在實(shí)際的小程序開發(fā)中摧冀,有這樣一種場景:我們預(yù)先選擇在哪個(gè)餐館吃飯凿掂,然后進(jìn)入當(dāng)前餐館的主頁面尝蠕,當(dāng)在input搜索框中輸入關(guān)鍵字時(shí)列肢,我們只會彈出當(dāng)前餐館才有的食材名稱血柳,而不是將整個(gè)市的餐廳所有食材都彈出來給用戶官册。
所以,針對上面這種情形混驰,有兩種解決方案:

  • 靜態(tài)配置:

在小程序搜索頁面對應(yīng)的js文件中攀隔,我們將接收到的餐館名作為條件,依據(jù)餐館名獲取對應(yīng)的菜名列表栖榨,然后將菜名數(shù)組中的菜名與關(guān)鍵字匹配昆汹,彈出含有關(guān)鍵字的菜名數(shù)組。

  • 動(dòng)態(tài)獲取聯(lián)想詞:

所謂動(dòng)態(tài)婴栽,就是在選擇了之后满粗,將餐廳名作為條件去數(shù)據(jù)庫查詢該餐廳中所包含的所有菜名,然后將所有菜名以json格式返回給小程序的js文件愚争,最后用關(guān)鍵字去匹配返回的菜名數(shù)組中的菜名映皆,再彈出包含關(guān)鍵字的菜名數(shù)組。

  • 兩種解決方案的對比:

從數(shù)據(jù)庫動(dòng)態(tài)獲取聯(lián)想詞的好處轰枝,那就是可以滿足后期的菜品更迭捅彻,直接在數(shù)據(jù)庫更新菜品即可,在小程序中用戶也能實(shí)時(shí)地看到關(guān)鍵字的聯(lián)想詞鞍陨;
然而靜態(tài)的聯(lián)想詞后期菜品更迭時(shí)步淹,需要更新小程序源代碼,要重新上線更新小程序,時(shí)效性較差缭裆。

2. 通過關(guān)鍵字自動(dòng)聯(lián)想的原理及代碼實(shí)現(xiàn)

  • index.wxml
<view>
  <input class="textinput" bindinput="bindinput" value="{{inputValue}}" placeholder="請輸入內(nèi)容" />
</view>
<scroll-view scroll-y="true" class="scrollview" hidden="{{hideScroll}}" style="{{arrayHeight>340?'height:340rpx':''}}">
  <view wx:for="{{bindSource}}">
    <view id="{{item}}" bindtap="itemtap" class="itemview">{{item}}</view>
  </view>
</scroll-view>
  • index.js
//index.js

var wayIndex = -1;
var school_area = '';
var grade = '';
// 當(dāng)聯(lián)想詞數(shù)量較多键闺,使列表高度超過340rpx,那設(shè)置style的height屬性為340rpx澈驼,小于340rpx的不設(shè)置height辛燥,由聯(lián)想詞列表自身填充
// 結(jié)合上面wxml的<scroll-view>
var arrayHeight = 0;

Page({
  data: {
    inputValue: '', //點(diǎn)擊結(jié)果項(xiàng)之后替換到文本框的值
    adapterSource: ["weixin", "wechat", "android", "Android", "IOS", "java", "javascript", "微信小程序", "微信公眾號", "微信開發(fā)者工具"], //本地匹配源
    bindSource: [], //綁定到頁面的數(shù)據(jù),根據(jù)用戶輸入動(dòng)態(tài)變化
    hideScroll: true,
  },
  
  //當(dāng)鍵盤輸入時(shí)缝其,觸發(fā)input事件
  bindinput: function (e) {
    //用戶實(shí)時(shí)輸入值
    var prefix = e.detail.value
    //匹配的結(jié)果
    var newSource = []
    if (prefix != "") { 
      // 對于數(shù)組array進(jìn)行遍歷挎塌,功能函數(shù)中的參數(shù) `e`就是遍歷時(shí)的數(shù)組元素值。
      this.data.adapterSource.forEach(function (e) { 
        // 用戶輸入的字符串如果在數(shù)組中某個(gè)元素中出現(xiàn)氏淑,將該元素存到newSource中
        if (e.indexOf(prefix) != -1) {
          console.log(e);
          newSource.push(e)
        }
      })
    };
    // 如果匹配結(jié)果存在勃蜘,那么將其返回,相反則返回空數(shù)組
    if (newSource.length != 0) {
      this.setData({
        // 匹配結(jié)果存在假残,顯示自動(dòng)聯(lián)想詞下拉列表
        hideScroll: false,
        bindSource: newSource,
        arrayHeight: newSource.length * 71
      })
    } else {
      this.setData({
        // 匹配無結(jié)果缭贡,不現(xiàn)實(shí)下拉列表
        hideScroll: true,
        bindSource: []
      })
    }
  },

  // 用戶點(diǎn)擊選擇某個(gè)聯(lián)想字符串時(shí),獲取該聯(lián)想詞辉懒,并清空提醒聯(lián)想詞數(shù)組
  itemtap: function (e) {
    this.setData({
      // .id在wxml中被賦值為{{item}}阳惹,即當(dāng)前遍歷的元素值
      inputValue: e.target.id,
      // 當(dāng)用戶選擇某個(gè)聯(lián)想詞,隱藏下拉列表
      hideScroll: true,
      bindSource: []
    })
  },
})

3. 通過nodejs從數(shù)據(jù)庫中實(shí)時(shí)獲取當(dāng)前餐館對應(yīng)的聯(lián)想詞數(shù)組

(待更新...)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眶俩,一起剝皮案震驚了整個(gè)濱河市莹汤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颠印,老刑警劉巖纲岭,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異线罕,居然都是意外死亡止潮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門钞楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喇闸,“玉大人,你說我怎么就攤上這事询件∪颊В” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵宛琅,是天一觀的道長刻蟹。 經(jīng)常有香客問我,道長嘿辟,這世上最難降的妖魔是什么座咆? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任痢艺,我火速辦了婚禮仓洼,結(jié)果婚禮上介陶,老公的妹妹穿的比我還像新娘。我一直安慰自己色建,他們只是感情好哺呜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箕戳,像睡著了一般某残。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陵吸,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天玻墅,我揣著相機(jī)與錄音,去河邊找鬼壮虫。 笑死澳厢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的囚似。 我是一名探鬼主播剩拢,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饶唤!你這毒婦竟也來了徐伐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤募狂,失蹤者是張志新(化名)和其女友劉穎办素,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祸穷,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡性穿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粱哼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片季二。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖揭措,靈堂內(nèi)的尸體忽然破棺而出胯舷,到底是詐尸還是另有隱情,我是刑警寧澤绊含,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布桑嘶,位于F島的核電站,受9級特大地震影響躬充,放射性物質(zhì)發(fā)生泄漏逃顶。R本人自食惡果不足惜讨便,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望以政。 院中可真熱鬧霸褒,春花似錦、人聲如沸盈蛮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抖誉。三九已至殊轴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袒炉,已是汗流浹背旁理。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留我磁,地道東北人孽文。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像十性,于是被迫代替她去往敵國和親叛溢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348