IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> el-button的学习 -> 正文阅读

[JavaScript知识库]el-button的学习

前言

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

button

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

定义

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

重要属性

属性描述
disableddisabled规定应该禁用该按钮
namebutton_name规定按钮的名称
typebutton、reset、submit规定按钮的类型

知识点

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

1、类型别名

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

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

2、PropType

import type { PropType } from 'vue'

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);
  },
},

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

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

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

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

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

5、插槽

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

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

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

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

<div>
   <!-- 具名插槽 -->
   <template v-solt="name">
       <div></div>
   </template>
   <!-- 剧名插槽外的内容 -->
   <div>aaa</div>
</div>

6、emit

emits: ['click'],

const handleClick = (evt: MouseEvent) => {
      emit('click', evt)
}

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

简单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>

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

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

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:41:13  更:2022-03-13 21:42:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:03:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码