1. 程式人生 > >小程式picker解決方案

小程式picker解決方案

看完這篇就少了一個攔路虎

前端程式碼:

       這裡沒有什麼難點,就一個注意點就是當你的陣列為二維陣列的時候需要設定range-key='你需要顯示的欄位名' 

      value="{{index}}",這裡的index就是資料的索引值,這個值的作用是顯示資料的第幾個值,比如這裡是1,就會在你開啟picker標籤的時候,顯示的就是陣列索引為1的這個欄位值

        <view class="m-inputPart">
            <view>選擇分類</view>
            <picker value="{{index}}" bindchange='changes' range="{{category}}" range-key='{{"name"}}'>
                                
                <input cursorSpacing="20" value="{{category[index].name}}"></input>

            </picker>
        </view>

現在我們來解決第一個難點

1.怎麼獲取到迴圈陣列的id

      這裡應該會有很多人跟我開始一樣,我設定一個自定義屬性就可以了啊!當你除錯的時候會發現,所有的id都是一樣的,因為你自定義屬性肯定會這樣定義data-id="{{category[index].id}}",這裡就是第一個坑了,你會發現你value的值是多少,那個id就全是這個索引的id,我們這樣的方案宣告失敗

這裡來介紹一下我自己的做法:

       我們就可以使用picker的本身屬性,當點選picker時會觸發bindchange這個事件,就會獲取value這個值,下來我們將選擇的這個value值儲存起來,我們在將分類的資料儲存到快取中

     開始迴圈分類資料,判斷當分類的索引值跟選擇的value相等時,宣告一個變數categoryindex,將分類資料的索引儲存起來

     下來直接在分類資料拿到選擇的分類id,儲存到快取中

js程式碼:

/*
author:咔咔
address:陝西西安
wechat:fangkangfk
*/

changes: function (e) {
      var num = e.detail.value;
      console.log('選擇了第'+num+'個')
      wx.setStorageSync('index', num);
      var categoryData = wx.getStorageSync('categoryData');
      for (var i = 0; i<categoryData.length;i++){
        if (i == num){
          var categoryIndex = num;
        }
      }
      var categoryId = categoryData[categoryIndex]['id'];
      wx.setStorageSync('categoryId', categoryId);
      this.setData({
        index: num,
      })
    },

提交資料時處理:

   提交資料時獲取分類id,存在時就直接使用,不存在的時候就是預設第一個即可,這樣就成功的獲取到了分類資料的id

      var categoryId = wx.getStorageSync('categoryId');

      if (categoryId) {
        var category_id = categoryId
      } else {
        var categoryData = wx.getStorageSync('categoryData');
        var category_id = categoryData[0]['id'];
      }

我們還需要在一次進入頁面的時候讓其顯示使我們之前選擇的資料

    這個index就是picker的value屬性的值,這個值上邊也說了是顯示資料的索引值

   index這個快取來自選擇的時候儲存的資料

   判斷這個index這個是否存在,存在的話就直接將value的值設定成他既可以,反之就是預設0

      var categoryIndex = wx.getStorageSync('index');

      if (categoryIndex){
        this.setData({
          index:categoryIndex
        })
      }else{
        this.setData({
          index:0
        })
      }