小程式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
})
}