当前位置:   article > 正文

微信小程序封装vant 下拉框select 多选组件_微信小程序下拉框

微信小程序下拉框

老规矩先上效果图:

本组件主要由小程序vant ui组件,vant 小程序ui网址vant-weapp

主要代码如下:

先封装子组件: select-checkbox  放在 components 文件夹里面

 select-checkbox.wxml:

  1. <view>
  2. <van-field label="{{label}}" model:value="{{ checkSelected }}" required placeholder="{{ place }}" border="{{ true }}" readonly
  3. right-icon="{{icon}}" bindtap="showPopup" />
  4. <van-popup show="{{ show }}" bind:close="onClose" position="bottom" custom-style="height: 60%;overflow:hidden;padding:10rpx 0rpx;">
  5. <!-- 取消、确定按钮 -->
  6. <view class="cityheader">
  7. <view bindtap="cancel" class="city-cancel">取消</view>
  8. <view bindtap="confirm" class="city-true">确定</view>
  9. </view>
  10. <!-- 内容区域 -->
  11. <van-checkbox-group value="{{ result }}" bind:change="onChange">
  12. <van-cell-group>
  13. <van-cell
  14. wx:for="{{ list }}"
  15. wx:key="index"
  16. title="{{ item }}"
  17. value-class="value-class"
  18. clickable
  19. data-index="{{ index }}"
  20. title-width="94%"
  21. center
  22. bind:click="toggle"
  23. >
  24. <van-checkbox
  25. catch:tap="noop"
  26. label-position="right"
  27. class="checkboxes-{{ index }}"
  28. name="{{ item }}"
  29. />
  30. </van-cell>
  31. </van-cell-group>
  32. </van-checkbox-group>
  33. </van-popup>
  34. </view>

select-checkbox.wxss:

  1. /* pages/select-checkbox/select-checkbox.wxss */
  2. .van-cell__value {
  3. text-align: left !important;
  4. }
  5. .cityheader {
  6. width: 100%;
  7. z-index: 5;
  8. }
  9. .city-cancel {
  10. float: left;
  11. margin: 20rpx;
  12. color: #969799;
  13. z-index: 11;
  14. position: relative;
  15. }
  16. .city-true {
  17. float: right;
  18. margin: 20rpx;
  19. color: #576b95;
  20. z-index: 11;
  21. position: relative;
  22. }

select-checkbox.js:

  1. // pages/select-checkbox/select-checkbox.js
  2. Component({
  3. /**
  4. * 组件的属性列表
  5. */
  6. properties: {
  7. label: String, // 输入框标签
  8. place: String, // 输入框提示
  9. list: Array, // 选择器 选项
  10. checkSelected: { // 选择器 选项数组中 对象的value的默认key
  11. type: String,
  12. value: 'text'
  13. }
  14. },
  15. // 监听传入的变量,当传入的值发生变化时,触发方法
  16. // observers: {
  17. // 'checkSelected': function (val) {
  18. // // val=> 就是父组件传入组件中的 tabsList 数据
  19. // console.log('???:', val)
  20. // }
  21. // },
  22. /**
  23. * 页面的初始数据
  24. */
  25. data: {
  26. icon:'arrow-down', // 下拉箭头
  27. show: false,
  28. result: [],
  29. },
  30. /**
  31. * 组件的方法列表
  32. */
  33. methods: {
  34. // 取消
  35. cancel() {
  36. this.setData({ show: false })
  37. },
  38. // 确定
  39. confirm() {
  40. this.setData({ show: false })
  41. this.triggerEvent('sync', { // 传递到组件外事件 , 返回当前选中项 对象
  42. value: this.data.checkSelected
  43. })
  44. },
  45. showPopup() {
  46. this.setData({ show: true })
  47. },
  48. onClose() {
  49. this.setData({ show: false })
  50. },
  51. onChange(event) {
  52. // console.log('event:', event)
  53. this.setData({
  54. result: event.detail,
  55. checkSelected: event.detail.join(',')
  56. })
  57. // console.log('this.data.checkSelected:', this.data.checkSelected)
  58. },
  59. toggle(event) {
  60. const { index } = event.currentTarget.dataset
  61. const checkbox = this.selectComponent(`.checkboxes-${index}`)
  62. checkbox.toggle()
  63. },
  64. noop() {},
  65. },
  66. attached: function () {
  67. console.log("父组件传过来:", this.properties.checkSelected) // 可以获取父组件传过来的值
  68. },
  69. })

select-checkbox.json:

  1. {
  2. "component": true,
  3. "usingComponents": {
  4. "van-field": "@vant/weapp/field/index",
  5. "van-popup": "@vant/weapp/popup/index",
  6. "van-cell": "@vant/weapp/cell/index",
  7. "van-cell-group": "@vant/weapp/cell-group/index",
  8. "van-checkbox": "@vant/weapp/checkbox/index",
  9. "van-checkbox-group": "@vant/weapp/checkbox-group/index"
  10. }
  11. }

父组件调用:

  1. <view>
  2. <select-checkbox style="width:100%" label="白蚁种类:" title-width="70" place="请选择白蚁种类" list="{{ list }}" bind:sync="getSelectBox" checkSelected=""></select-checkbox>
  3. </view>
  1. data: {
  2. checkSelected: '',
  3. list: ['黑翅土白蚁', '黄翅大白蚁', '台湾乳白蚁', '黑胸散白蚁' ],
  4. },
  5. // 获取选中的值
  6. getSelectBox: function(e) {
  7. // 打印选中项
  8. console.log("11111111:", e.detail.value)
  9. this.setData({
  10. checkSelected: e.detail.value
  11. })
  12. },
  1. {
  2. "usingComponents": {
  3. "select-checkbox": "/components/select-checkbox/select-checkbox"
  4. }
  5. }

本组件只要用 vant-checkbox  组件,外套用了 点击弹出vant-popup 弹层,然后封装成组件的模板,全局调用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/290604
推荐阅读
相关标签
  

闽ICP备14008679号