• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

小程序选择组件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
<template>
  <view class="checkbox-container">
    <view v-for="(item, index) in checkboxListData" :key="index" class="checkbox-item" :style="{'border-color': typeColor[type], 'background': item.isChecked? typeColor[type] : '#ffffff'}"
      @click="checkboxItemClick(index, item)">
      <view :style="{'color': item.isChecked? '#ffffff' : typeColor[type] }">{{item.name}}</view>
    </view>
  </view>
</template>

<script>
  export default {
    model: {
      prop: 'selectedList',
      event: 'selectedListChange'
    },
    props: {
      checkboxList: {
        type: Array,
        default: () => [{
            name: "t1",
            id: 1
          },
          {
            id: 2,
            name: "t2"
          }
        ]
      },
      selectedList: {
        type: Array,
        default: () => [{
          name: 't1',
          id: 1
        }]
      },
      type: {
        type: String,
        default: "success" // primary/success/danger
      },
      isSingle: {
        type: Boolean,
        default: false
      }
    },
    data() {
      return {
        checkboxListData: [],
        typeColor: {
          primary: "#007bff",
          success: "#8BC34A",
          danger: "#dc3545"
        },
      };
    },
    watch: {
      selectedList(newVal) {
        console.log('select list new value:', newVal)
        this.getCheckboxListData(newVal)
      }
    },
    
    mounted() {
      // 获取checkbox list data
      this.getCheckboxListData()
    },
    
    methods: {
      getCheckboxListData(selectedList) {
        // 获取checkbox list data
        if (selectedList === undefined) {
          selectedList = this.selectedList
        } 
        const checkboxListData = []
        for (const i in this.checkboxList) {
          checkboxListData.push(Object.assign({
            isChecked: false
          }, this.checkboxList[i]))

          for (const j in selectedList) {
            if (this.checkboxList[i].id === selectedList[j].id) {
              checkboxListData[i].isChecked = true
              break
            }
          }
        }
        this.checkboxListData = checkboxListData
        console.log('mounted list data:', this.checkboxListData)
      },

      updateCheckboxListData(listItem) {
        const selectedList = []
        for (const i in this.checkboxListData) {
          if (this.checkboxListData[i].id === listItem.id) {
            if (this.isSingle) {
              this.checkboxListData[i].isChecked = true
            } else {
              this.checkboxListData[i].isChecked = !this.checkboxListData[i].isChecked
            }
          } else {
            if (this.isSingle) {
              this.checkboxListData[i].isChecked = false
            }
          }
          
          if (this.checkboxListData[i].isChecked) {
            selectedList.push(this.checkboxListData[i])
          }
        }
        return selectedList
      },

      checkboxItemClick(index, item) {
        console.log('checkbox item click:', index, item)
        const result = this.updateCheckboxListData(item)
        
        console.log('selected list:', result)
        this.$emit('selectedListChange', result)
      }
    }
  };
</script>

<style scoped>
  .checkbox-container {
    padding: 14upx 0;
  }

  .checkbox-item {
    border-width: 1px;
    border-style: solid;
    border-radius: 7upx;
    padding: 7upx 24upx;
    margin-right: 24upx;
    display: inline-flex;
    font-size: 14px;
  }
</style>

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python一个抓取糗百的段子的小程序发布时间:2022-07-18
下一篇:
小程序引入es-canvaswx:for单页面渲染多个for不同数据发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap