伴随着Vue的诞生,它似乎就被人寄予厚望,不仅仅是因为其轻量级的MVVM设计方式,而且其实现了组件化开发模式,所以越来越多的人会拿Vue和AngularJS、React Native做比较。具体关于它们的比较,我不做过多描述,使用哪个应该根据使用场景出发。

Vue.js

最近,因为有业务需要使用Vue去开发,所以我们需要自己封装出Vue.js的各种常用组件。今天就给大家介绍一下我封装Vue的icon组件的过程。当然这篇文章不是Vue.js,Webpack类的基础教学课程,而是在大家有些基础的情况下去看的。所以文章中只介绍了部分重点的代码,以及代码的截图,如果有不大能看懂的地方可以先学下Vue和webpack的基础。如果真的有需要可以在评论处评论,我可以出些Vue,Gulp,Webpack等基础文章。

icon组件外观

首先我们看一下icon组件运行出来后的模样

icon组件

icon组件实现过程

  • 项目搭建

icon组件实现后是一个可以直接使用的npm包,使用的是Yeoman构建工具,配和Gulp+Webpack,生成的工作目录结构如下

目录结构

(1)config文件夹下是webpack的配置文件

(2)src下是Vue组件的源文件

(3)example文件夹下是示例,刚看到的截图就是example文件夹下的文件运行后的样子

  • icon源文件编写

项目结构生成好后,编写icon组件的源文件就是最重要的了。

icon组件是一个.vue文件,其中包含template,style和script。

我实现的icon组件样式是借助于ionicons,所以要借助于ionicons的样式文件,因此会有以下的代码

引入ionicons的样式

然后考虑icon组件应该具备的几项属性,一个是样式,利用type变量去控制;一个是颜色,利用color变量去控制;一个是大小,利用size变量去控制。所以template中有以下代码

template代码

在script中有以下代码

script代码

同时预先定义好icon组件大中小的几个样式,因此在style中会有以下代码

style代码

至此icon组件的源码编写就结束了,但并不是整个工程就结束了,需要对webpack进行设置,而这也是最重要的部分。

因为我们在icon组件的源码中引入了ionicons的样式,所以需要在webpack的配置文件中加入对css文件的解析loader,而css文件中又会引入woff,svg等文件,因此又要加入对这些文件的解析loader,如果不加入的对css,tff,svg等文件解析的话会报错。

在webpack.base.js文件中加入以下代码

webpack的配置

  • 样例的访问

在源文件和webpack配置好后,就可以通过在example文件夹下写demo了。

在demo.vue文件中,使用<icon>标签即可访问到自定义的icon组件

icon组件的例子

通过type,size,color三个参数来定义我们需要的icon组件的样式,运行出来后的例子就如一开始运行出来的一样,是不是很好看呢?

总结

Vue的组件还有很多,例如form表单类的,View视图类,Navigation导航类等,都需要一个个去编写,不过只要我们搞懂Vue的运行模式和Webpack的编译模式就可以很方便的写出来了。

VUE -- 如何快速的写出一个Vue的icon组件?的更多相关文章

  1. 如何写好一个vue组件,老夫的一年经验全在这了【转】 v-bind="$attrs" 和 v-on="$listeners"

    如何写好一个vue组件,老夫的一年经验全在这了 一个适用性良好的组件,一种是可配置项很多,另一种就是容易覆写,从而扩展功能 Vue 组件的 API 来自三部分——prop.事件和插槽: prop 允许 ...

  2. 用vue.js写的一个瀑布流的组件

    用vue.js写的一个瀑布流的组件:https://segmentfault.com/a/1190000010741319 https://www.jianshu.com/p/db3cadc03402

  3. 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数

    题目: 输入一个数字n  如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数  写出一个函数 首先,这道题肯定可以用动态规划来解, n为整数时,n的解为 n/2 的解加1 n为奇数时 ...

  4. java————数组 简单写出一个管理系统

    数组的特点 1,  数组是一块连续的空间,下标描述空间的位置. 2,  下标从0开始,最大下标为数组长度—1.(*.length-1) 3,  数组元素都是变量.(就是每个下标对应的内容).变量的类型 ...

  5. 如何写出一个让人很难发现的bug?

    程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug. 那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢? - 1 -新手开发+ ...

  6. 浅谈如何写出一个让(坑)人(王)很(之)难(王)发现的bug

    该文章内容来自脚本之家,原文链接:https://www.jb51.net/news/598404.html 程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因 ...

  7. 请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件。

    请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件. <a href=”mailto: zhangsan@d-heaven.com”>发邮件</ ...

  8. 2019-8-31-C#-如何写出一个不能被其他程序集继承的抽象类

    title author date CreateTime categories C# 如何写出一个不能被其他程序集继承的抽象类 lindexi 2019-08-31 16:55:58 +0800 20 ...

  9. JS函数 编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数。

    编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数. 任务 第一步: 编写代码完成一个函数的定义吧. 第二步: 我们来补充函数体中的控制语句,完成函数功能吧. 提示: ...

随机推荐

  1. CentOS安装按进程实时统计流量情况工具NetHogs笔记

    CentOS安装按进程实时统计流量情况工具NetHogs笔记 一.概述 NetHogs是一款开源.免费的,终端下的网络流量监控工具,它可监控Linux的进程或应用程序的网络流量.NetHogs只能实时 ...

  2. 写微信API所遇到的问题

    1.接口还没出来之前. 根据微信网页版的页面,自己做了页面,分成了两个页面,一个是登录之后的,一个是登录之前的.后来接口出来之后我师兄说要做成只有一个页面时,我就有点吓到了,想想都觉得难,后来用了JQ ...

  3. ueditor在QQ浏览器或者IE浏览器中无法加载

    因为IE浏览器有兼容问题,打开网址,浏览器不一定以最新的文档模式加载.按F12查看 在你网址的head标签中加入:<meta http-equiv="x-ua-compatible&q ...

  4. 596. Classes More Than 5 Students

    There is a table courses with columns: student and class Please list out all classes which have more ...

  5. 通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]

    参照了网上N多文档,不一一列表,共享精神永存!!!! ================================================== 获取所有安装包 安装包分为两类,rpm安装包 ...

  6. SPOJ - SUBST1 D - New Distinct Substrings

    D - New Distinct Substrings 题目大意:求一个字符串中不同子串的个数. 裸的后缀数组 #include<bits/stdc++.h> #define LL lon ...

  7. JS中==与===操作符的比较

    摘要: ===操作符: 要是两个值类型不同,返回false 要是两个值都是number类型,并且数值相同,返回true 要是两个值都是stirng,并且两个值的String内容相同,返回true 要是 ...

  8. ZOJ 3498 Javabeans

    脑筋急转弯. 如果是偶数个,那么第一步可以是$n/2+1$位置开始到$n$都减去$n/2$,后半段就和前半段一样了. 如果是奇数个,那么第一步可以是$(n+1)/2$位置开始到$n$都减去$(n+1) ...

  9. 按照grouip分组,之后分组调用生成正式凭证 的接口

    按照grouip分组,之后分组调用生成正式凭证 的接口 Map<String, List<OperatingLogVO>> resultMap = new HashMap< ...

  10. FZOJ 2245 动态树(离散+离线+ 树状数组)

    Problem 2245 动态树 Accept: 17    Submit: 82Time Limit: 3000 mSec    Memory Limit : 65536 KB  Problem D ...