小程序picker解决方案

举报
原来是咔咔 发表于 2022/03/27 03:13:50 2022/03/27
【摘要】 看完这篇就少了一个拦路虎 前端代码:        这里没有什么难点,就一个注意点就是当你的数组为二维数组的时候需要设置range-key='你需要显示的字段名'        value="{undefined{index}}",这里的index就是...

看完这篇就少了一个拦路虎

前端代码:

       这里没有什么难点,就一个注意点就是当你的数组为二维数组的时候需要设置range-key='你需要显示的字段名' 

      value="{undefined{index}}",这里的index就是数据的索引值,这个值的作用是显示数据的第几个值,比如这里是1,就会在你打开picker标签的时候,显示的就是数组索引为1的这个字段值


  
  1. <view class="m-inputPart">
  2. <view>选择分类</view>
  3. <picker value="{{index}}" bindchange='changes' range="{{category}}" range-key='{{"name"}}'>
  4. <input cursorSpacing="20" value="{{category[index].name}}"></input>
  5. </picker>
  6. </view>

 

现在我们来解决第一个难点

1.怎么获取到循环数组的id

      这里应该会有很多人跟我开始一样,我设置一个自定义属性就可以了啊!当你调试的时候会发现,所有的id都是一样的,因为你自定义属性肯定会这样定义data-id="{{category[index].id}}",这里就是第一个坑了,你会发现你value的值是多少,那个id就全是这个索引的id,我们这样的方案宣告失败

这里来介绍一下我自己的做法:

       我们就可以使用picker的本身属性,当点击picker时会触发bindchange这个事件,就会获取value这个值,下来我们将选择的这个value值保存起来,我们在将分类的数据保存到缓存中

     开始循环分类数据,判断当分类的索引值跟选择的value相等时,声明一个变量categoryindex,将分类数据的索引保存起来

     下来直接在分类数据拿到选择的分类id,保存到缓存中

 

js代码:


  
  1. /*
  2. author:咔咔
  3. address:陕西西安
  4. wechat:fangkangfk
  5. */
  6. changes: function (e) {
  7. var num = e.detail.value;
  8. console.log('选择了第'+num+'个')
  9. wx.setStorageSync('index', num);
  10. var categoryData = wx.getStorageSync('categoryData');
  11. for (var i = 0; i<categoryData.length;i++){
  12. if (i == num){
  13. var categoryIndex = num;
  14. }
  15. }
  16. var categoryId = categoryData[categoryIndex]['id'];
  17. wx.setStorageSync('categoryId', categoryId);
  18. this.setData({
  19. index: num,
  20. })
  21. },

 

提交数据时处理:

   提交数据时获取分类id,存在时就直接使用,不存在的时候就是默认第一个即可,这样就成功的获取到了分类数据的id


  
  1. var categoryId = wx.getStorageSync('categoryId');
  2. if (categoryId) {
  3. var category_id = categoryId
  4. } else {
  5. var categoryData = wx.getStorageSync('categoryData');
  6. var category_id = categoryData[0]['id'];
  7. }

 

 

我们还需要在一次进入页面的时候让其显示使我们之前选择的数据

    这个index就是picker的value属性的值,这个值上边也说了是显示数据的索引值

   index这个缓存来自选择的时候保存的数据

   判断这个index这个是否存在,存在的话就直接将value的值设置成他既可以,反之就是默认0

  


  
  1. var categoryIndex = wx.getStorageSync('index');
  2. if (categoryIndex){
  3. this.setData({
  4. index:categoryIndex
  5. })
  6. }else{
  7. this.setData({
  8. index:0
  9. })
  10. }

 

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/82804751

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。