• uniapp picker 多列选择器用法


    uniapp picker 多列选择器联动筛选器交互处理方法,
    uniapp 多列选择器  mode="multiSelector" 数据及筛选联动交互处理,
    通过接口获取数据,根据用户选择当前列选项设置子列数据,实现三级联动效果,
    本示例中处理了三级无数据时则从数据中删除,处理三级后二级无数据时则亦从数据中删除,删除的数据最终不展示在筛选器中。

    html

    1. <picker mode="multiSelector" @change="bindMultiPickerChange" @columnchange="bindMultiPickerColumnChange" :value="multiIndex" :range="communityListArray" range-key="label">
    2. <view class="picker">
    3. {{communityListArray[0][multiIndex[0]].label ? communityListArray[0][multiIndex[0]].label + ',' : ''}}
    4. {{communityListArray[1][multiIndex[1]].label ? communityListArray[1][multiIndex[1]].label + ',' : ''}}
    5. {{communityListArray[2][multiIndex[2]].label ? communityListArray[2][multiIndex[2]].label : '请选择所属社群'}}
    6. view>
    7. picker>

    data设置参数数据

    1. data() {
    2. return {
    3. communityListArray : [],
    4. multiIndex : [],
    5. }
    6. }

    created 或 onLoad 中,调用请求接口获取筛选项数据方法

    this.communityListDataSet();

    接口获取筛选项数据,如 res.data:

    1. [
    2. {
    3. id: 3,
    4. label: "天津",
    5. parent_id: 0,
    6. children: [
    7. {
    8. id: 51035,
    9. label: "东丽区",
    10. parent_id: 3,
    11. cityCommunity: [
    12. // 无社群数据
    13. ],
    14. },
    15. ],
    16. },
    17. {
    18. id: 1,
    19. label: "北京",
    20. parent_id: 0,
    21. children: [
    22. {
    23. id: 72,
    24. label: "朝阳区1",
    25. parent_id: 1,
    26. cityCommunity: [
    27. {area_id: 72, id: 13, label: "朝阳区1-社群名称",}
    28. ],
    29. },
    30. {
    31. id: 73,
    32. label: "朝阳区2",
    33. parent_id: 1,
    34. cityCommunity: [
    35. // 无社群数据
    36. ],
    37. }
    38. ],
    39. },
    40. {
    41. id: 2,
    42. label: "上海",
    43. parent_id: 0,
    44. children: [
    45. {
    46. id: 78,
    47. label: "黄浦区",
    48. parent_id: 2,
    49. cityCommunity: [
    50. {area_id: 78, id: 16, label: "黄浦区-社群名称",}
    51. ],
    52. },
    53. {
    54. id: 2813,
    55. label: "徐汇区",
    56. parent_id: 2,
    57. cityCommunity: [
    58. {area_id: 2813, id: 17, label: "徐汇区-社群名称",}
    59. ],
    60. }
    61. ],
    62. },
    63. {
    64. id: 4,
    65. label: "重庆",
    66. parent_id: 0,
    67. children: [
    68. {
    69. id: 119,
    70. label: "南川区",
    71. parent_id: 4,
    72. cityCommunity: [
    73. {area_id: 119, id: 5, label: "南川区-社群名称111",},
    74. {area_id: 119, id: 6, label: "南川区-社群名称222",}
    75. ],
    76. }
    77. ],
    78. },
    79. ]

    methods 处理方法:

    1. // 请求接口获取筛选项数据
    2. communityListDataSet(){
    3. ...
    4. this.communityListData = res.data;
    5. this.manageCommunityListThreeLevel()
    6. ...
    7. },
    8. /*
    9. 处理接口返回数据:筛选项数据删除无社群数据的城市、省份
    10. 如:天津、北京-朝阳区2,无社群数据
    11. */
    12. // 处理三级无社群数据
    13. manageCommunityListThreeLevel(){
    14. let communityLen = this.communityListData.length
    15. for(var i=communityLen-1;i>=0;i--){
    16. let communityChildrenLen = this.communityListData[i].children.length
    17. for(var j=communityChildrenLen-1;j>=0;j--){
    18. if(!this.communityListData[i].children[j].cityCommunity.length){
    19. this.communityListData[i].children.splice(j,1)
    20. }
    21. }
    22. }
    23. this.manageCommunityListTwoLevel()
    24. },
    25. // 处理二级无城市数据
    26. manageCommunityListTwoLevel(){
    27. let communityLen = this.communityListData.length
    28. for(var i=communityLen-1;i>=0;i--){
    29. if(!this.communityListData[i].children.length){
    30. this.communityListData.splice(i,1)
    31. }
    32. }
    33. this.communityListArray = [
    34. this.communityListData,
    35. this.communityListData[0].children,
    36. this.communityListData[0].children[0].cityCommunity,
    37. ]
    38. },
    39. // value 改变时触发 change 事件
    40. bindMultiPickerChange: function (e) {
    41. // console.log(e)
    42. this.multiIndex = e.detail.value
    43. },
    44. // 某一列的值改变时触发 columnchange 事件
    45. bindMultiPickerColumnChange: function (e) {
    46. if(!this.multiIndex || !this.multiIndex.length){
    47. this.multiIndex = [0,0,0]
    48. }
    49. let column = e.detail.column;
    50. let value = e.detail.value;
    51. // console.log(column , value);
    52. let multiIndex = this.multiIndex;
    53. multiIndex[column] = value;
    54. if(column == 0){
    55. multiIndex[1] = 0;
    56. multiIndex[2] = 0;
    57. }
    58. if(column == 1){
    59. multiIndex[2] = 0;
    60. }
    61. this.multiIndex = multiIndex;
    62. let communityListArray = [];
    63. communityListArray[0] = this.communityListData;
    64. communityListArray[1] = this.communityListData[multiIndex[0]].children;
    65. if(this.communityListData[multiIndex[0]].children[multiIndex[1]].cityCommunity){
    66. communityListArray[2] = this.communityListData[multiIndex[0]].children[multiIndex[1]].cityCommunity;
    67. }else{
    68. communityListArray[2] = [];
    69. }
    70. this.communityListArray = communityListArray;
    71. },

    交互效果截图

     最终处理后的数据,天津、北京-朝阳区2,已从筛选器中删除

  • 相关阅读:
    SpringSession ( 一 ) HttpSession
    mysql基于SSM的大学生创业众筹平台网站 毕业设计源码212000
    低代码软件:开发老手的新选择?
    Demo记录|移动端H5页面如何实现上下滑动触发事件的小功能
    面试算法题之旋转置换,旋转跳跃我闭着眼
    java计算机毕业设计新生入学报到管理系统源码+系统+数据库+lw文档
    【STM32】通用定时工作原理
    腾讯云TKE-助力游戏出海的新引擎
    vue3 和vue2 的比较
    Linux内核 6.6版本将遏制NVIDIA驱动的不正当行为
  • 原文地址:https://blog.csdn.net/qq_16494241/article/details/137864439