从零动手封装一个通用的vue按钮组件

我们在使用目前最主流的前端框架vue在开发过程中,组件是一个非常重要的组成部分,可以这么说,所有的vue应用,都是由一个一个的小组件拼装而成的。

正是由于vue组件如此重要,所以vue的生态中,也非常多的UI组件库,其中最著名的非Element-UI莫属,里面有非常多的封装完善的组件提供给我们使用,大大的增强了我们的开发效率。

那么,这些UI框架的组件,究竟是如何封装的呢?如何动手从零开始封装自己的组件呢?接下来,我们就从最简单的一个Button的组件封装说起。如下,是Element-UI中的按钮组件,接下来,我们就一步一步来实现它们。

 

首先,定义一个组件index.vue,配置路由渲染出来

  

其次,自己定义一个组件my-butotn, 写好基本的样式,按钮中间,使用插槽<slot/>占位。

写好按钮的基本样式,代码如下

 

 

效果如下:

 

然后,我们先来实现type属性,根据type的不同,渲染不同的默认颜色效果,主要是通过传入的type不同,里面渲染不同的类,实现不同的样式效果,核心代码如下

 

实现出来的效果如下图:

 

接下来,我们来实现size属性,通过传入不同的size,实现不同的尺寸的按钮的控制。

核心代码如下:

}

 

 

 

实现效果如下:

 

那么,我们还可以控制按钮是否是圆角按钮,通过设计一个属性round,如果在使用按钮的时候,传入了属性round,那么这个按钮就是圆角按钮。代码如下

 

 

 

 

实现的效果如下:

最后,我们来实现以下按钮的应用效果,只要在使用自定义组件的时候,传入diabled属性,那么禁用效果就生效,否则,效果就不生效。代码如下:

最终实现效果如下:

 

 

综上所述,我们就一步一步的动手,从零实现了一个通用的按钮组件,实现了type控制按钮的表现效果,size控制按钮的尺寸,round属性控制按钮是否是圆角,和disable属性控制按钮是否禁用,那么其他组件的封装其实也大同小异,请大家持续关注后续文章。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例。这个组件可以根据传入的属性动态生成表单项,支持表单验证,并且可以自定义表单项的样式。 ```vue <template> <form> <div v-for="(field, index) in fields" :key="index"> <label :for="field.name">{{ field.label }}</label> <input :type="field.type" :name="field.name" :placeholder="field.placeholder" :value="formData[field.name]" @input="updateFormData(field.name, $event.target.value)" :class="{ 'is-invalid': errors[field.name] }" /> <div class="invalid-feedback">{{ errors[field.name] }}</div> </div> </form> </template> <script> export default { props: { fields: { type: Array, required: true, }, submitText: { type: String, default: 'Submit', }, }, data() { return { formData: {}, errors: {}, }; }, methods: { updateFormData(field, value) { this.formData[field] = value; }, validateForm() { let isValid = true; this.errors = {}; // 验证每个表单项是否有值 this.fields.forEach((field) => { if (!this.formData[field.name]) { this.errors[field.name] = `${field.label} is required`; isValid = false; } }); return isValid; }, submitForm() { if (this.validateForm()) { // 提交表单 console.log(this.formData); } }, }, }; </script> <style> .is-invalid { border-color: red; } .invalid-feedback { color: red; } </style> ``` 在父组件中使用这个通用表单组件,只需要传入一个包含表单项的数组和一个提交按钮的文本即可: ```vue <template> <div> <my-form :fields="fields" :submit-text="submitText" /> </div> </template> <script> import MyForm from '@/components/MyForm.vue'; export default { components: { MyForm, }, data() { return { fields: [ { name: 'name', label: 'Name', type: 'text', placeholder: 'Enter your name', }, { name: 'email', label: 'Email', type: 'email', placeholder: 'Enter your email', }, { name: 'password', label: 'Password', type: 'password', placeholder: 'Enter your password', }, ], submitText: 'Create Account', }; }, }; </script> ``` 这样就可以在父组件中动态定义表单项,并且实现表单验证和提交。当然,这只是一个简单的示例,你可以根据实际需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值