element-ui源码解读系列1button组件

以后可能不在这里更新,感兴趣的话建议直接去github上看我上传的项目study-element-ui

<template lang="">
    <button 
        class="el-button"
        @click="handleClick"
        :disabled="buttonDisabled || loading"
        :autofocus="autofocus"
        :type="nativeType"
        :class="[
            type ? 'el-button--' + type : '',
            buttonSize ? 'el-button--' + buttonSize : '',
            // 当值为真时绑定键给class,例如buttonDisabled为真,则给class绑定‘is-disabled’
            {
                'is-disabled': buttonDisabled,
                'is-loading': loading,
                'is-plain': plain,
                'is-round': round,
                'is-circle': circle
            }
        ]"
    >
    <!-- 使用v-if判断,展示loading图标或者是其他图标 -->
    <i class="el-icon-loading" v-if="loading"></i>
    <i :class="icon" v-if="icon && !loading"></i>
    <!-- $slots.default获取非具名插槽的内容,如果存在就放在slot中 -->
    <span v-if="$slots.default"><slot></slot></span>
    </button>
</template>
<script>
export default {
  name: "ElButton",

    // 可能会有祖先组件控制此按钮,inject来获取祖先传递的数据
  inject: {
      elForm: {
        default: ''
      },
      elFormItem: {
        default: ''
      }
    },

    // 基本上为控制按钮样式的值
  props: {
    // 按钮的类型
    type: {
      type: String,
      default: "default",
    },
    // 按钮的大小
    size: String,
    // 按钮中的图标
    icon: {
      type: String,
      default: "",
    },
    // 按钮的type
    nativeType: {
      type: String,
      default: "button",
    },
    // 是否加载中
    loading: Boolean,
    // 是否可点击
    disabled: Boolean,
    // 空心?
    plain: Boolean,
    // 默认选中(自动对焦?)
    autofocus: Boolean,
    // 圆角
    round: Boolean,
    // 圆按钮
    circle: Boolean,
  },

  computed: {
    // 如果按钮在表单中,则返回表单项元素中控制子组件的尺寸大小(elFormItemSize),否则返回undefined
    _elFormItemSize() {
      return (this.elFormItem || {}).elFormItemSize;
    },
    // 根据顺序来决定button的大小
    buttonSize() {
      return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
    },
    // 如果props中存在disabled,那么选用它的值,否则使用this.elForm.disabled或者undefined
    buttonDisabled() {
      return this.$options.propsData.hasOwnProperty("disabled")
        ? this.disabled
        : (this.elForm || {}).disabled;
    },
  },

  methods: {
    // 处理点击事件,通过this.$emit("click", evt),向上传递click事件,并且将事件源evt传递
    handleClick(evt) {
      this.$emit("click", evt);
    },
  },
};
</script>
<style lang="">
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值