按钮组件cBtn——属性选择系列组件库(design by yRan)

本组件二次封装iview的Button,可以在全局安装了Iview的项目或者局部引入了Button的页面中自由使用。

目录

效果展示

在这里插入图片描述
在这里插入图片描述

从上到下分别是:选中状态按钮、取消选中状态按钮

功能描述

  1. 按钮名和按钮状态均可由父组件传参到子组件
  2. 点击选中,点击取消
  3. 可组合使用,实现类似按钮样式的tab,将所有tab的状态和名字保存在一个attrs数组里面

结构代码

<template>
  <div class="c-btn">
    <Button v-if="checked" type="primary" @click="check_btn">{{
      checked_name ? checked_name : name
    }}</Button>
    <Button v-else type="primary" ghost @click="check_btn">{{
      unchecked_name ? unchecked_name : name
    }}</Button>
  </div>
</template>
  • checked_name:父组件没有命名时使用默认名字
  • checked:子组件的按钮选中状态由父组件决定

逻辑代码

  data () {
    return {
      checked: this.check_state
    }
  },
  props: {
    name: {
      type: String,
      default () {
        return '点我呀'
      }
    },
    checked_name: {
      type: String,
      default () {
        return ''
      }
    },
    unchecked_name: {
      type: String,
      default () {
        return ''
      }
    },
    check_state: {
      type: Boolean,
      default () {
        return false
      }
    }
  },
  methods: {
    check_btn () {
      this.checked = !this.checked
      this.$emit('click', this.checked, this.name)
    }
  },
  watch: {
    check_state (n, o) {
      if (n !== o) {
        this.checked = n
      }
    }
  }
  • check_btn :状态改变回传到父组件,由父组件来决定子组件的状态
  • check_state :监听父组件传递的按钮选中状态,同步变化

组件应用

<cBtn
    name="点我呀"
    :check_state="attrs[0].checked"
    @click="attr_handle"
/>

import cBtn from '@/components/c-btn'

components: {
    cBtn 
}

data () {
    return {
        attrs: attrBox.attrs
    }
}
  • import引入——>组件注册——>使用
  • 父——>子传参:name按钮名字、check_state选中状态

事件钩子

// 属性处理
    attr_handle (checked, attr_name) {
      this.attrs.forEach((a) => {
        if (a.name !== attr_name && a.checked && checked) {
          a.checked = false
        } else if (a.name === attr_name) {
          a.checked = checked
        }
      })
      if (checked) this.cur_attr = attr_name
    }
  • attr_handle:属性处理

github

完整代码点击这里

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值