内容简介:我会带大家从浅入深的封装一些常用的组件,并解析。 这个系列预计会写五六篇左右,可能会更多,会带大家封装一个公用组件和一些业务性组件。从浅层到复杂的组件封装最后发npm包。这里的css和icon我是用的color-ui的,我自己写css的话……那可能是一个灾难。前置知识:
我会带大家从浅入深的封装一些常用的组件,并解析。 这个系列预计会写五六篇左右,可能会更多,会带大家封装一个公用组件和一些业务性组件。从浅层到复杂的组件封装最后发npm包。
这里的css和icon我是用的color-ui的,我自己写css的话……那可能是一个灾难。
前置知识:
- 会使用vue开发项目
- 封装过vue组件
- 至少看过jsx语法(虽然我也不太懂这个语法……:joy:)
- es6 多少要会一些。
思考:
不知道大家有没有想过这几个问题? 复制代码
1. ui组件的代码是怎么封装的?
2. 我们自己封装的组件跟那些发到npm上面的ui组件有啥不同?
3. 为什么这个俩组件要这样子使用??
import { Tabbar, TabbarItem } from 'vant';
Vue.use(Tabbar).use(TabbarItem);
<van-tabbar v-model="active">
<van-tabbar-item icon="home-o">标签</van-tabbar-item>
<van-tabbar-item icon="search" dot>标签</van-tabbar-item>
<van-tabbar-item icon="friends-o" info="5">标签</van-tabbar-item>
<van-tabbar-item icon="setting-o" info="20">标签</van-tabbar-item>
</van-tabbar>
复制代码
第一个问题:
其实ui组件的封装跟咱们写的组件封装方式是差不多的!只是别人考虑的情况多。
第二个问题:
区别嘛,也不大。只是别人封装好的组件帮咱们考虑了N多种情况。
这个常见把! 如果是让我自己写一个navbar的组件,我一般只会考虑这些情况。
- 返回文字可以配置
- 标题可以配置
- 右边icon可以配置。
我只会考虑到这些。因为我的项目就只有这些需求了,任务完成!
辣么vant呢?
可以看到考虑到了很多情况!已经可以满足大部分的需求了。
第三个问题
WTF????
<div
class="el-steps"
:class="[
!simple && 'el-steps--' + direction,
simple && 'el-steps--simple'
]">
<slot></slot>
</div>
复制代码
那咱们看看 element的step。
好像都有一个slot 插槽。辣么这样就能明白了!
Tabbar 是一个父div,里面包裹着 TabbarItem。
封装ui组件
这是一个非常累人的事情……搞不好被喷都很正常……
我已经做好被喷的准备了!!!!!!!!!!!
-
新建一个vue项目(不做讲解了。)
-
把color-ui的css 拷贝过来,并在App.vue 中引入。 或者从这个地方拿过来https://github.com/martin-yin/Pipi-Dinosaur/tree/master/src/assets
-
在项目根目录新建 packages/icon/index.js, packages/icon/main.js。(项目名就不要在意了。)
- 开始编写代码
main.js
export default {
name: 'Icon',
props: {
icon: String,
styled: String,
color: String,
},
render(h) {
// 肯定有小伙伴会问这个this 是谁???? 其实就是你这个Icon vue对象。
const { icon, color, styled } = this;
return (
<span style={styled} class={[icon, color]}></span>
);
}
}
复制代码
index.js
import Icon from './main';
// 注册组件……
Icon.install = function(Vue) {
Vue.component(Icon.name, Icon);
};
export default Icon;
复制代码
是的你没有看错……我们已经写完一个可复用的组件了……:joy:
别开炮……代码还没写完……
main.js中添加两行代码。 import icon from '../packages/icon'; // 使用这个插件 Vue.use(icon); 复制代码
App.vue
<div v-for="(item, index) in iconList" :key="index">
<Icon :icon="item.name" color="text-green" styled="font-size: 38px"/>
</div>
export default {
data(){
return {
iconList: [
{
name: 'icon-appreciate'
}, {
name: 'icon-check'
}, {
name: 'icon-close'
}, {
name: 'icon-edit'
}, {
name: 'icon-formfill'
}, {
name: 'icon-loading2'
}, {
name: 'icon-list'
}, {
name: 'icon-cascades'
}, {
name: 'icon-tagfill'
}, {
name: 'icon-vipcard'
}
]
}
}
}
复制代码
启动项目
这个时候呢!你可以.vue 页面使用了Icon 这个组件了!
是不是感觉跟咱们平时封装的vue组件没啥区别撒???辣么就对了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 封装JDBC—非框架开发必备的封装类
- SpringBlade 2.3.2 发布,增加 OSS 封装及单元测试封装
- SpringBlade 2.3.2 发布,增加 OSS 封装及单元测试封装
- docker 封装 alinode
- 封装Apk签名工具
- axios封装笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cypherpunks
Julian Assange、Jacob Appelbaum、Andy Müller-Maguhn、Jérémie Zimmermann / OR Books / 2012-11 / GBP 8.99
Cypherpunks are activists who advocate the widespread use of strong cryptography (writing in code) as a route to progressive change. Julian Assange, the editor-in-chief of and visionary behind WikiLea......一起来看看 《Cypherpunks》 这本书的介绍吧!