看完这篇就少了一个拦路虎javascript
前端代码:html
这里没有什么难点,就一个注意点就是当你的数组为二维数组的时候须要设置range-key='你须要显示的字段名' 前端
value="{ {index}}",这里的index就是数据的索引值,这个值的做用是显示数据的第几个值,好比这里是1,就会在你打开picker标签的时候,显示的就是数组索引为1的这个字段值java
<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,咱们这样的方案宣告失败this
这里来介绍一下我本身的作法:spa
咱们就能够使用picker的自己属性,当点击picker时会触发bindchange这个事件,就会获取value这个值,下来咱们将选择的这个value值保存起来,咱们在将分类的数据保存到缓存中调试
开始循环分类数据,判断当分类的索引值跟选择的value相等时,声明一个变量categoryindex,将分类数据的索引保存起来code
下来直接在分类数据拿到选择的分类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 }) }