当前位置:   article > 正文

el-button的学习

el-button

前言

如何在有一定vue基础的前提下,进一步的提示自己的vue呢?如何能写出更加完美的组件呢?学习别人的优秀代码就是很不错的一种方式。Element Plus无疑是很不错的一个学习资源,除了可以好好学习vue3,顺便还能学习一下ts。

button

el-button 的底层是基于原生button进行封装的。说的原生button,才发现自己好像真的不怎么熟悉,如果跟我一样的话,可以看一下 HTML 标签

定义

<button>标签定义一个按钮。`在 button 元素内部,您可以放置内容,比如文本或图像。

重要属性

属性

描述

disabled

disabled

规定应该禁用该按钮

name

button_name

规定按钮的名称

type

button、reset、submit

规定按钮的类型

知识点

注: 就简单学习一下个人觉得比较重要的地方,就只考虑button,不考虑其他内容。

1、类型别名

//类型别名
export type ButtonType = "default" | "primary";
  • 1
  • 2

类型别名一般用于给一个联合类型取新的名字,对代码的整洁还是有很大的帮助

2、PropType

import type { PropType } from 'vue'
  • 1

Vue 对定义了 type 的 prop 执行运行时验证。要将这些类型提供给 TypeScript,我们需要使用 PropType 指明构造函数。

3、指定并校验props属性

// 引入自定义的类型
import type {ButtonType} from "./ts/type";

// 按钮类型
type: {
  type: String as PropType<ButtonType>,
  default: "default",
  validator: (val: string) => {
    return ["default", "primary"].includes(val);
  },
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

validator:Function 自定义验证函数会将该 prop 的值作为唯一的参数代入。在非生产环境下,如果该函数返回一个 falsy 的值 (也就是验证失败),一个控制台警告将会被抛出。
4、类型断言

//  将一个父类断言为更加具体的子类
 type: String as PropType<ButtonType>,
  • 1
  • 2
  • 将一个联合类型断言为其中一个类型

  • 将一个父类断言为更加具体的子类

  • 将任何一个类型断言为any

  • 将any断言为一个具体的类型

5、插槽

 <span v-if="$slots.default"><slot></slot></span>
  • 1

这个之前没接触过,查了一下,$slots官方解释:

default property 包括了所有没有被包含在具名插槽中的节点,或 v-slot:default 的内容。

大体就是插槽内除了具名插槽(不包括default)的内容,比如:

<div>
   <!-- 具名插槽 -->
   <template v-solt="name">
       <div></div>
   </template>
   <!-- 剧名插槽外的内容 -->
   <div>aaa</div>
</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6、emit

emits: ['click'],

const handleClick = (evt: MouseEvent) => {
      emit('click', evt)
}
  • 1
  • 2
  • 3
  • 4
  • 5

因为按钮本身就存在单击事件,因此最后还是执行的单击事件。

简单demo

<template>
    <button
        :class="[
            'base-button',
            type ? type : 'default',
            disabled ? 'disabled' : ''
        ]"
        disabled
        @click="handleClick"
    >
        <span v-if="$slots.default">
            <slot></slot>
        </span>
    </button>
</template>

<script lang="ts">
import { defineComponent } from "vue";
import type { PropType } from "vue";

// 引入自定义的类型
import type { ButtonType } from "./type";
export default defineComponent({
    name: 'YcButton',
    props: {
        // 按钮类型
        type: {
            type: String as PropType<ButtonType>,
            default: "default",
            validator: (val: string) => {
                return ["default", "primary"].includes(val);
            },
        },
        //是否禁用
        disabled: {
            type: Boolean,
            default: false
        },
        icon: {
            type: String,
            default: ''
        }
    },
    emits: ['click'],
    setup(props, { emit }) {
        const handleClick = (evt: MouseEvent) => {
            emit('click', evt)
        }

        return {
            handleClick
        }
    }
});
</script>

<style scoped lang="scss">
.base-button {
    padding: 10px 15px;
    cursor: pointer;
    border-radius: 5px;
    font-size: 14px;
    font-family: "hyjt";
}
.primary {
    background: #409eff;
    border: 1px solid #dcdfe6;
    color: #ffffff;
}
.default {
    background: #ffffff;
    border: 1px solid #dcdfe6;
    color: #606266;
}
.disabled {
    background: #a0cfff;
    cursor: not-allowed;
}
</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

效果
上面那个是我自己写的,下面这个是el-button,不考虑其他东西,感觉还可以??

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

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/106169?site
推荐阅读
相关标签
  

闽ICP备14008679号