最近做的小程序有個需求,input輸入框輸入時下拉出列表,然後可以進行模糊搜索。對於列出來的數據並沒有要求從庫中取,所以我利用python將excel中的數據跑出來,拼接成我需要的json格式,然後存儲到小程序本地緩存中,主要思路如下:
1.json數據以js文件的形式存儲到小程序文件中,定義數據出口
2.因爲我想一進小程序就加載進來,所以我在app.js中的最上面引入這個js文件(var loadData = require('/data/action-data.js');),並且在onLaunch方法中將loadData存入本地緩存(進來的時候先判斷一下是否有緩存了)
即:
onLaunch: function () {
wx.setStorage({
key: "actionkey",
data: loadData.infoList
})
}
這樣就可在需要的頁面讀取到需要的數據了。
3.input聚焦的時候列出數據,輸入時獲取輸入的字符,與緩存中的數據循環對比(indexOf即可實現),如果indexOf值不等於-1,即可push到數組中,然後重新渲染到頁面
//聚焦事件
showList:function(){
var _this = this;
wx.getStorage({
key: 'actionkey',
success: function (res) {
_this.setData({
actionArr: res.data,
temp: res.data,
isHide: false
});
}
})
},
//鍵盤輸入事件
inputEvent:function(e){
var actionArr = this.data.actionArr;
var val = e.detail.value;
var temp = [];
actionArr.forEach(function(i){
var name = i.Name;
if (name.indexOf(val) != -1){
temp.push({ 'Name': name});
}
});
if(val == ''){
temp = []
}
this.setData({
actionName: e.detail.value,
temp: temp,
})
},
效果:
另:附上python跑txt數據的幾行代碼(數據很亂,爲了拼成我需要的格式,不得不跑一下···)
#-*- coding: UTF-8 -*-
import codecs
def runaction():
file=open('action.txt','r',encoding='UTF-8');
line = file.readline()
linehead = '['
lineend = ']'
newline = ''
while line:
line = file.readline().replace('\n','')
newline += "{'Name':'"+line+"'},"
finalline = linehead + newline + lineend
with codecs.open('action.txt', 'a', encoding='utf-8') as f:
f.write(finalline)
runaction()