前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小而美的IKUN-UI组件库源码学习(按钮 Button)

小而美的IKUN-UI组件库源码学习(按钮 Button)

作者头像
HelloWorldZ
发布2024-05-24 14:11:21
830
发布2024-05-24 14:11:21
举报
文章被收录于专栏:前端开发前端开发

该组件库的按钮功能可以这样来总结:

普通按钮

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

朴素按钮

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

按钮禁用

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

带图标

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

按钮不同大小

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

加载中的按钮

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

水波纹效果的按钮

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

Props 属性

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

Events 事件

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

现在来看到button按钮的具体实现:

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

一切从这个文件 index.ts,开始 按钮 Button 源码的阅读:

index.ts 文件作为该 按钮 Button 的入口文件,这里导出了组件及其类型定义

代码语言:javascript
复制
import Button from './src/button.vue' // 导入Button组件
import { withInstall } from '../_utils/withInstall'  // 导入withInstall函数

const IkButton = withInstall(Button) // 使用withInstall函数来增强Button组件

export default IkButton // 将增强后的IkButton作为默认导出

export type { ButtonInstance, ButtonType } from './src/button' // 从./src/button导出ButtonInstance和ButtonType类型

这里为什么要这样处理呢?

代码语言:javascript
复制
export type { ButtonInstance, ButtonType } from './src/button'

这样做可以允许其他开发者在使用组件时能够进行类型检查。

直接进入正题:

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

button / src / button.vue

代码语言:javascript
复制
<script lang="ts" setup name="IkButton">
import { computed } from 'vue'
import { buttonProps } from './button'

const props = defineProps(buttonProps)
const emits = defineEmits(['click'])

const computedCls = computed(() => {
  const { type, disabled, loading, round, size, plain, ikun } = props
  return [
    'ik-button',
    `ik-button-${type}`,
    `ik-button-${size}`,
    {
      'ik-button-disabled': disabled || loading,
      'ik-button-plain': plain,
      'ik-button__round': round,
      // 'ik-button__ikun': ikun,
    },
  ]
})
const iconColor = computed(() => {
  if (!props.type || props.type === 'default') return ''
  return '#ffffff'
})

const onClick = () => {
  emits('click')
}

defineExpose({
  /** @description button type */
  type: props.type,
})
</script>
<template>
  <button :class="computedCls" @click="onClick" :disabled="props.disabled">
    <span class="ik-button__inner">
      <img v-if="ikun" width="20" src="https://laine001.github.io/ikun-ui/ikun.gif" />
      <ik-icon v-if="icon" :name="props.icon" :color="iconColor"></ik-icon>
      <ik-icon v-if="loading" name="loading" :color="iconColor" class="loading-icon"></ik-icon>
      <slot></slot>
    </span>
  </button>
</template>

button / src / button.ts

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档