vue element-ui之怎么封装一个自己的组件的详解


Posted in Javascript onMay 20, 2019

为什么要进行组件封装?

封装的目的就是为了能够更加便捷、快速的进行业务功能的开发。组件(component)是vue的最强大功能之一,组件可以实现一些类似功能的复用及与其它业务逻辑的解耦。在开发中,我们难免会写很多类似的、重复的代码,有时候两个业务模块有相似的功能,采用复制粘贴已经很省事,但如果涉及的字段或有一些小差别,你也会觉得很烦,毕竟你要从头到尾瞅着去改动。这时候如果把那些相同的功能,抽象出来抽离成组件,通过组件引用方式就会显得格外省事了。

Vue中怎么封装一个自己的组件

想要封装好一个组件,必须要熟练掌握的三个技能:1.父组件传值到子组件(props) 2.子组件传值到父组件($emit)3.插槽使用(slot)。对于一个独立的组件,props是用来为组件内部注入核心内容;$emit用来使这个组件通过一些操作来融入其它组件中。

使用Vue做开发,想必你一定会使用vue-cli这个脚手架,同时想必你一定会使用element-ui这个大名鼎鼎的前端框架。本文就以vue-cli来介绍一下怎么封装自己的组件。下面就以后续要介绍的一个封装的组件为例,来为大家介绍:

1.首先,可以看到前端工程下有一个components目录,在components下新建一个文件夹xx-button,再在xx-button下创建一个index.vue文件,如图:

vue element-ui之怎么封装一个自己的组件的详解vue element-ui之怎么封装一个自己的组件的详解

2.然后在index.vue中写自己的代码。为了规范,注意代码中的name命名XxButton,以后使用的组件就是XxButton:

<template>
 <el-button-group>
  <el-button v-for="(btn,index) in this.buttons" :key="index" :type="btn.type ? btn.type:'primary'"
   :icon="btn.icon" :size="btn.size?btn.size:'mini'" @click="btn.click">{{btn.label}}</el-button>
 </el-button-group>
</template>
 
<script>
export default {
 name: 'XxButton', // 注意这里的name命名,就是你以后封装好后使用的组件名
 props: {
  buttons: {
   type: Array,
   required: true
  }
 }
}
</script>

3.然后在components下还有一个index.js文件,咱们要在index.js中注册上自己定义的组件:

import XxButton from './xx-button'
 
Vue.component(XxButton.name, XxButton)

如图所示:

vue element-ui之怎么封装一个自己的组件的详解

注意:这个index.js也一定要在main.js中引入,不然就无法使用。当然,你也可以直接在main.js中直接注册组件,这里为了便于组件的统一管理,就在components下建了一个index.js来统一注册组件。

vue element-ui之怎么封装一个自己的组件的详解

4.最后,在页面开发中,就可以愉快的使用我们注册的组件啦。

vue element-ui之怎么封装一个自己的组件的详解

this.buttons的定义如下:

vue element-ui之怎么封装一个自己的组件的详解

对element-ui组件进一步封装介绍

以上是对怎么封装自己的组件做了一个简单的demo介绍,后续我将会对工作中经常使用的组件进行封装介绍,主要针对element-ui做二次封装,由浅入深,先介绍一些简单的比如:按钮组件封装、分页组件封装、详情页面封装、Dialog对话框封装,然后对Form表单封装、简单表格封装,最后结合前面封装的组件再封装一个功能齐全的组件。当然在实际开发中,并不是所有的业务功能完全与组件功能契合,这就需要组件具有更多的扩展性,后续的内容中也会对组件封装过程中怎么提高扩展性做介绍。

以上所述是小编给大家介绍的vue element-ui之怎么封装一个自己的组件详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
Aug 25 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
Nov 02 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
JS实现分页导航效果
Feb 19 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
一文搞懂ES6中的Map和Set
May 20 #Javascript
详解vue 在移动端体验上的优化解决方案
May 20 #Javascript
vue-i18n结合Element-ui的配置方法
May 20 #Javascript
JS实现选项卡效果的代码实例
May 20 #Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 #Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 #Javascript
微信小程序图表插件wx-charts用法实例详解
May 20 #Javascript
You might like
MySQL修改密码方法总结
2008/03/25 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
PHP5.3新特性小结
2016/02/14 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
JS中类或对象的定义说明
2014/03/10 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Python中functools模块函数解析
2017/03/12 Python
python获取中文字符串长度的方法
2018/11/14 Python
python列表推导式入门学习解析
2019/12/02 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
乔迁之喜主持词
2014/03/27 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
Elasticsearch 基本查询和组合查询
2022/04/19 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers