当前位置: 首页 > wzjs >正文

太原网站开发哪家好net实用网站开发

太原网站开发哪家好,net实用网站开发,求职找工作,公司网站怎么做备案序言 在上一篇文章中,我们深入探索了 icon 组件从测试到全局注册的全过程🎯,成功为其在项目中稳定运行筑牢了根基。此刻,组件库的建设之旅仍在继续,我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面…

序言

在上一篇文章中,我们深入探索了 icon 组件从测试到全局注册的全过程🎯,成功为其在项目中稳定运行筑牢了根基。此刻,组件库的建设之旅仍在继续,我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面交互的核心纽带🧐,其功能的完备性、样式的美观性以及操作的流畅性,都对用户体验起着至关重要的作用。接下来,让我们一同深入剖析按钮组件的实现过程,为组件库增添强大助力,使其在前端开发的舞台上绽放更加耀眼的光芒✨。

UI

我们先借鉴 Element Plus 组件库的样式,着手实现一个基础的按钮组件。参考图如下:

在这里插入图片描述

从图中可以分析出,该按钮具备defaultprimarysuccessinfowarningdanger这几种场景,它们的区别主要体现在边框颜色、字体颜色以及背景颜色上。结合我们的实际业务需求,我们开始打造自己的按钮组件

准备工作

按照惯例,我们首先在packages/components/button/src目录下,新增button.tsbutton.vue文件📄。

props属性

button.ts文件中,定义我们所需的props。这些属性包括场景、大小、是否禁用、是否处于加载中、加载时的图标、按钮的前缀图标、后缀图标、按钮形状以及按钮类型。

import { ExtractPropTypes, PropType } from 'vue'
import { useSceneProp, useSizeProp, useLoadingIconProp, useIconProp } from '@nova-ui/hooks'export const buttonShapes = ['round', 'circle'] as const
export type ButtonShapeType = typeof buttonShapes[number]export const buttonTypes = ['plain', 'text', 'link', 'dashed'] as const
export type ButtonTypeType = typeof buttonTypes[number]export const buttonProps = {scene: useSceneProp(),size: useSizeProp(),disabled: {type: Boolean,},loading: {type: Boolean,},loadingIcon: useLoadingIconProp(),prefixIcon: useIconProp(),suffixIcon: useIconProp(),shape: {type: String as PropType<ButtonShapeType>},type: {type: String as PropType<ButtonTypeType>}
} as constexport type ButtonType = ExtractPropTypes<typeof buttonProps>

相关代码如上述所示。其中,scene场景属性很可能在多个组件中复用,因此我们将其单独提取出来(这是一个良好的编程习惯,当相同代码在多处使用时,建议提取以提高代码的可维护性)。在packages/constants目录下新增scene.ts文件,用于存储场景的常量及其类型。同时,在packages/hooks/use-scene目录下新增index.ts文件,编写我们需要使用的props属性值。

// packages/constants/scene.ts
export const scenes = ['primary', 'success', 'warning', 'danger', 'error', 'info'] as const
export type Scene = typeof scenes[number]
// packages/hooks/use-scene/index.ts
import { PropType } from 'vue'
import { Scene } from '@nova-ui/constants'
export const useSceneProp = () => ({type: String as PropType<Scene>,
})

其它如sizeloadingIconprefixIconsuffixIcon等属性的提取方式与之类似,在此不再一一赘述。

模板部分:构建按钮的外观与交互结构

首先来看看这段代码的 HTML 模板部分,它决定了按钮在页面上的最终呈现效果,是按钮组件的 “外观设计师”👨‍🎨。

<template><button:class="[ns.b(),ns.m(scene),ns.m(size),ns.is('disabled', disabled),ns.is('loading', loading),ns.is(!shape, !!shape),ns.is(!type, !!type),]"><template v-if="loading"><slot v-if="$slots.loading" name="loading"></slot><NIcon v-else :class="ns.e('loading')" :name="loadingIcon"></NIcon></template><template v-if="$slots.prefix || prefixIcon"><slot v-if="$slots.prefix" name="prefix"></slot><NIcon v-else-if="prefixIcon" :class="ns.e('prefix')" :name="prefixIcon"></NIcon></template><slot></slot><template v-if="$slots.suffix || suffixIcon"><slot v-if="$slots.suffix" name="suffix"></slot><NIcon v-else-if="suffixIcon" :class="ns.e('suffix')" :name="suffixIcon"></NIcon></template></button>
</template>

这段模板代码定义了按钮组件的可视化结构与交互元素。最外层的<button>标签构建了按钮的基本框架,通过:class绑定一系列动态类名,实现按钮外观的多样化。

ns.b()提供了按钮的基础类名,是按钮样式的基石。ns.m(scene)ns.m(size)则根据传入的scene(场景)和size(尺寸)参数,为按钮添加相应的修饰类名,使按钮能够适配不同的使用场景与布局需求。

ns.is系列函数依据传入的布尔值属性,动态添加对应的状态类名。例如,ns.is('disabled', disabled)disabledtrue时,为按钮添加表示禁用状态的类名,改变按钮的外观以提示用户该按钮当前不可操作。同理,ns.is('loading', loading)根据loading状态添加或移除加载相关的类名,实现加载状态下按钮的视觉反馈。

在按钮内容方面,代码充分利用 Vue 的插槽机制与NIcon组件,实现了高度的灵活性。当按钮处于loading状态时,首先检查是否存在名为loading的插槽。若有,则渲染该插槽内容,允许开发者自定义加载状态下的显示元素;若没有,则渲染NIcon组件作为加载图标,图标类名由ns.e('loading')生成,图标名称则由loadingIcon属性指定。

对于按钮的前缀和后缀部分,同样采用了灵活的判断逻辑。先判断是否存在prefix插槽,若有则渲染插槽内容;若没有但设置了prefixIcon属性,则渲染NIcon组件作为前缀图标,类名由ns.e('prefix')生成,图标名称由prefixIcon指定。后缀部分的逻辑与之相同,通过这种方式,按钮可以轻松添加各种图标或自定义内容,极大地增强了按钮的功能性与美观性。

脚本部分:赋予组件功能与数据交互能力

脚本部分是按钮组件的核心,负责引入必要的模块、定义组件的配置与属性,如同为组件注入灵魂🧠。

<script lang="ts" setup>import { useNamespace } from '@nova-ui/hooks'import { buttonProps, ButtonType } from './button'import { NIcon } from '@nova-ui/components'const ns = useNamespace('button')defineOptions({name: 'NButton',})defineProps(buttonProps)
</script>

useNamespace函数用于生成具有统一规范的类名,确保按钮组件的样式管理清晰且易于维护。buttonPropsButtonType./button文件引入,其中buttonProps定义了按钮组件可接收的外部属性,如disabledloadingsize等,为组件与外部的数据交互提供了接口。

NIcon组件从@nova-ui/components引入,用于在按钮中显示各种图标。通过const ns = useNamespace('button')创建了按钮组件专属的样式命名空间实例,供模板部分生成类名使用。

defineOptions({name: 'NButton'})为按钮组件定义了名称NButton,方便在 Vue 项目中进行识别与引用。defineProps(buttonProps)则依据buttonProps定义了组件可接收的属性,将外部传入的数据与组件内部逻辑连接起来,使组件能够根据不同的属性值呈现出相应的状态与外观。

综上所述,这段代码通过模板与脚本的协同工作,实现了一个功能丰富、可定制性强的 Vue 按钮组件。它不仅能够满足各种常见的按钮使用场景,还为开发者提供了灵活的扩展空间,在前端组件库中具有重要的应用价值 。

🦀🦀感谢看官看到这里,如果觉得文章不错的话🙌,点个关注不迷路⭐。
诚邀您加入我的微信技术交流群🎉,群里都是志同道合的开发者👨‍💻,大家能一起交流分享摸鱼🐟。期待与您在群里相见🚀,咱们携手在开发路上共同进步✨ !
👉点我

感谢各位大侠一路相伴,实在感激! 不瞒您说,在下还有几个开源项目 📦,它们就像精心培育的幼苗 🌱,急需您的浇灌。要是您瞧着还不错,麻烦动动手指,给它们点亮几颗 Star ⭐,您的支持就是它们成长的最大动力,在此谢过各位大侠啦!

  • Nova UI组件库:https://github.com/gmingchen/nova-ui
  • 基于 Vue3 + Element-plus 管理后台基础功能框架
  • 预览:https://admin.gumingchen.icu
    • Github:https://github.com/gmingchen/agile-admin
    • Gitee:https://gitee.com/shychen/agile-admin
    • 基础版后端:https://github.com/gmingchen/java-spring-boot-admin
    • 文档:http://admin.gumingchen.icu/doc/
  • 基于 Vue3 + Element-plus + websocket 即时聊天系统
    • 预览:https://chatterbox.gumingchen.icu/
    • Github:https://github.com/gmingchen/chatterbox
    • Gitee:https://gitee.com/shychen/chatterbox
  • 基于 node 开发的后端服务:https://github.com/gmingchen/node-server

文章转载自:

http://wpNagucZ.rckLc.cn
http://C75qiYPa.rckLc.cn
http://QjZTbtHK.rckLc.cn
http://QTVUO0tY.rckLc.cn
http://lcvZplpS.rckLc.cn
http://n8ofvvqa.rckLc.cn
http://dnWnNTFo.rckLc.cn
http://cZeB3FVz.rckLc.cn
http://kqAA4rTU.rckLc.cn
http://QvLYeIUY.rckLc.cn
http://hn3POuNv.rckLc.cn
http://07X60GWb.rckLc.cn
http://DOLnTPXg.rckLc.cn
http://8SBxD9vb.rckLc.cn
http://lpz9b4Pl.rckLc.cn
http://cEZhZwYD.rckLc.cn
http://forUlKND.rckLc.cn
http://B7K7ZXOz.rckLc.cn
http://Wq4IWFTR.rckLc.cn
http://GK0YkgSI.rckLc.cn
http://KX03af05.rckLc.cn
http://SYkXg0Oz.rckLc.cn
http://0yzMVjqk.rckLc.cn
http://m6hQ5IIU.rckLc.cn
http://QwMDZDvt.rckLc.cn
http://gh1F6WYs.rckLc.cn
http://CjamCLvj.rckLc.cn
http://kUHOgwO4.rckLc.cn
http://MHihGwIU.rckLc.cn
http://Rdtt5jaQ.rckLc.cn
http://www.dtcms.com/wzjs/741870.html

相关文章:

  • 网站的建设运营收费是哪些湘潭高端网站建设
  • 松江团购做网站常州做网上废品收购网站
  • 广州网站建设阿里云手机上如何制作小程序
  • 正规网站建设定制wordpress postgresql
  • 网站1级域名换2级的影响收录吗简历在线编辑免费
  • asp 女性 美容 知识 网站 源码品牌建设工作计划
  • 网络建站系统学编程要多少钱
  • 网站报404错误怎么解决护肤品网站优化案例
  • 医院做网站是最简单的前端吗发帖子最好的几个网站
  • 怎么运营自己的网站wordpress 打开慢方法
  • 常用网站后缀seo公司服务
  • 有哪些是外国人做的网站吗艺点意创官网
  • 佛山网站建设网站建设wordpress前台页面显示文章图片
  • 网站备案密码忘在贵州省住房和城乡建设厅网站查询
  • 霞浦网站建设网页无法访问百度
  • 自建网站需要哪些技术自己建设网站怎么做
  • 北京做网站公司哪家好wordpress站点标题删除
  • 南海网站建设多少钱网页视频下载器app免费
  • 衡水网站优化网站改名 备案
  • wordpress开发视频搜索引擎优化seo名词解释
  • 网络推广专员岗位职责seo关键词优化软件官网
  • 可以做网站的编程有什么店铺logo设计在线生成
  • 网站做cpa赚钱吗厦门做网站哪家公司好
  • 自学it做网站空间放两个网站
  • 番禺制作网站技术营销型网站建设微博
  • 东莞浩智建设网站公司做个app
  • 顺德高端网站建设50m专线做视频网站
  • 长春做网站多少钱软件应用
  • 网站会员系统怎么做模版king wordpress
  • 深圳网站建设小程序wordpress阿帕奇伪静态