此次編寫留言,記事本demo,涉及到的小程序的技術主要是存入緩存和讀取緩存。還有小程序基本組件知識。
wxml代碼如下:
<!--pages/test/test.wxml--> <text>pages/test/test.wxml</text> <view class="mes_view"> <input type="text" placeholder="請輸入留言內容" bindinput="getval"/> <button size="mini" bindtap="sbumit" >提交</button> </view> <view class="mes_list"> <ul> <li wx:for="{{meslist}}" wx:for-item="item">{{item.mes}} <icon data-index="{{index}}" class="rightClass" type="cancel" size="16" bindtap="dellist" /></li> </ul> </view>
data初始化數據如下:
// pages/test/test.js Page({ /** * 頁面的初始數據 */ data: { getval:'', hello:'hello', meslist:[] },
input框中填寫內容時觸發bindinput 執行getval函數,getval函數獲取input框中的值賦值給data的getval,代碼如下:
getval:function(e){ this.setData({ getval:e.detail.value }) },
點擊提交時,執行submit函數,首先將data的meslist數據賦值給變量list進行存儲,每次提交時,將獲取到的mes:data.getval值用數組push函數,自動添加到最后一行。
最后將得到的list數組信息賦值給meslist
sbumit: function (options) { var that =this; console.log('-----設置前-------'); console.log(that.data.getval); var list = that.data.meslist; list. push({ mes:that.data.getval}); that.setData({ meslist:list }); },
數據刪除按鈕,給按鈕icon提供一個變量信息index,當進行循環輸出時,index自增,用來區分不同留言信息。
data-index="{{index}}"
點擊刪除按鈕時,執行dellist函數,獲取頁面上的index值,區分要刪除的留言數。
首先將目前的留言條數賦值給newlist,對newlist進行刪除用戶點擊的具體信息,用的是splice函數。此函數的返回值是刪除的該元素信息,因此不可直接賦值。
dellist:function(res){ var u =res.target.dataset.index; var newlist = this.data.meslist; newlist.splice(u,1); // var newlist = this.data.meslist.splice(u,1); // 這樣的方法是錯誤的,splice方法返回的是被刪除的元素, this.setData({ meslist:newlist }); },
onHide函數為生命周期函數--監聽頁面隱藏,當頁面隱藏時,將用戶信息存儲到緩存中,key為查找的關鍵字。
onHide: function () { var res = this.data.meslist; console.log('頁面隱藏了'); wx.setStorage({ key:"meslist", data:res, success: function(res) { console.log('存儲緩存成功') } }) },
從緩存中取數據,當打開頁面時,執行onLoad函數,獲取緩存,緩存數據的結果存放在res.data中,同時改變頁面顯示內容,用setData函數。
/** * 生命周期函數--監聽頁面加載 */ onLoad: function (options) { console.log('頁面顯示了'); var that = this; wx.getStorage({ key: 'meslist', success: function(res) { console.log(res.data) that.setData({ meslist:res.data }) } }) },
整個demo功能比較簡單,用到的知識也是小程序常用的,這個小demo做出后,對小程序的理解也加深了一步。
補充,完善功能點:測試demo時,發現,留言提交后,input框的內容不會進行改變,點擊提交還會無限提交,效果非常不好。
因此修改了這個bug。
wxml代碼如下:
<view class="mes_view"> <input type="text" placeholder="請輸入留言內容" bindinput="getval" value="{{inputval}}"/> <button size="mini" bindtap="sbumit" >提交</button> </view>
給value加了一個變量,當value值為空的時候placeholder的值才會出現。
data: { getval:'', hello:'hello', meslist:[], inputval:"" },
js代碼如下:
sbumit: function (options) { var that =this; console.log('-----設置前-------'); console.log(that.data.getval); var list = that.data.meslist; if(that.data.getval){ list. push({ mes:that.data.getval}); that.setData({ meslist:list, inputval:"", getval:"" }); } else{ wx.showModal({ title: '提示', content: '請輸入留言內容', }) } },
點擊提交時,先判斷,value值是否有值,沒有值直接彈出窗口提示。有值時執行下一步操作,此處記住setData的時候,一定要將inputval和getval兩個值初始化,設為空。
因為在進行了一次提交時,getval值已經取得值,因此,如果getval不初始化,仍然可以提交。此處研究了半個小時。