此次編寫留言,記事本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不初始化,仍然可以提交。此處研究了半個小時。

