微信小程序留言,記事本demo案例編寫


 

 

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

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM