Element-UI源码——button按钮

button

常用的操作按钮。

button.vue

<template>
  <!-- 通过判断buttonDisabled计算属性 和 loading决定是否禁用按钮 
  autofocus原生属性是否聚焦
  nativeType原生type属性
  class使用了数组混合对象的写法,通过传入的type判断按钮的类型如(el-button--primary)
  buttonSize设定按钮的大小如(el-button--mini)
  剩下的就是是否禁用 是否加载中 是否朴素按钮 是否圆角按钮 是否圆形按钮 -->
  <button
    class="el-button"
    @click="handleClick"
    :disabled="buttonDisabled || loading"
    :autofocus="autofocus"
    :type="nativeType"
    :class="[
      type ? 'el-button--' + type : '',
      buttonSize ? 'el-button--' + buttonSize : '',
      {
        'is-disabled': buttonDisabled,
        'is-loading': loading,
        'is-plain': plain,
        'is-round': round,
        'is-circle': circle
      }
    ]"
  >
  <!-- loading图标 -->
    <i class="el-icon-loading" v-if="loading"></i>
    <!-- 使用icon图标时展现 当loading正在加载时不展示 -->
    <i :class="icon" v-if="icon && !loading"></i>
    <!-- 插槽 可以传入图标 如下传入了一个右箭头
    <el-button type="primary">下一页<i class="el-icon-arrow-right el-icon--right"></i></el-button> -->
    <span v-if="$slots.default"><slot></slot></span>
  </button>
</template>
<script>
  export default {
    name: 'ElButton',
// 从祖先组件注入的elForm 和 elFormItem组件实例 这样可以在button中操作表单中的属性
    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: {
      // 使用elFormItem中的大小 elFormItemSize是elFormItem中的计算属性
      _elFormItemSize() {
        return (this.elFormItem || {}).elFormItemSize;
      },
      // 按钮的大小 本身的大小 或 elFormItem的大小 或 通过vue.use传入的大小如下
      // Vue.use(Element, { size: 'small', zIndex: 3000 })
      buttonSize() {
        return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
      },
      //2.15.7版本是否禁用 如果存在disabled属性使用自身的disabled 否则使用elForm上的disabled
      buttonDisabled() {
        return this.$options.propsData.hasOwnProperty('disabled') ? this.disabled : (this.elForm || {}).disabled;
      }
    },
    methods: {
      // 调用组件定义click事件 并将event事件作为参数传入
      handleClick(evt) {
        this.$emit('click', evt);
      }
    }
  };
</script>

其中对于inject注入的属性:

inject: {
  elForm: {
    default: ''
  },
  elFormItem: {
    default: ''
  }
},

在el-form-item.vue中可以看到传入的是组件本身,这样可以在这样可以在button中操作表单中的属性

// el-form-item.vue
provide() {
	return {
		elFormItem: this
    };
}

el-button-group

以按钮组的方式出现,常用于多项类似操作。源码就是使用div进行包裹

<template>
  <div class="el-button-group">
    <slot></slot>
  </div>
</template>
<script>
  export default {
    name: 'ElButtonGroup'
  };
</script>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI 是一个基于 Vue.js 的开源UI组件库,可以用于构建Web应用程序的用户界面。要在 Vue 3 使用 Element-UI,您需要按照以下步骤进行设置: 1. 在项目路径下的终端运行以下命令来安装 Element-UI:`npm i element-ui -S`。 2. 在 main.js 通过 import 导入 Element-UI: ```javascript import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 3. 如果您只想按需引入 Element-UI 的某些组件,可以按照以下步骤进行设置: a. 通过 import 导入指定的组件,例如 Button: ```javascript import { Button } from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(Button); ``` b. 安装 babel-plugin-component 插件以减小项目的体积:`npm install babel-plugin-component -D`。 c. 在项目根目录下的 babel.config.js 文件添加以下代码: ```javascript module.exports = { presets: [ '@vue/cli-plugin-babel/preset' ], plugins: [ [ 'component', { 'libraryName': 'element-ui', 'styleLibraryName': 'theme-chalk' } ] ] } ``` 关于Vue 3 的 Element-UI 的更多信息和使用示例,您可以参考以下内容: 1. [Vue Element-UI 后台管理项目实战(项目概述【附源码】)](链接一) 2. [Vue Element-UI 后台管理项目实战(一)](链接二) 3. [Vue Element-UI 后台管理项目实战(二)](链接三) 4. [Vue Element-UI 后台管理项目实战(三)](链接四) 5. [Vue Element-UI 后台管理项目实战(四)](链接五) 6. [Vue Element-UI 后台管理项目实战(五)](链接六) 7. [Vue Element-UI 后台管理项目实战(六)](链接七) 8. [Vue Element-UI 后台管理项目实战(七)](链接八) 9. [Vue Element-UI 后台管理项目实战(八)(完结)](链接九)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值