我会带你们从浅入深的封装一些经常使用的组件,并解析。 这个系列预计会写五六篇左右,可能会更多,会带你们封装一个公用组件和一些业务性组件。从浅层到复杂的组件封装最后发npm包。css
这里的css和icon我是用的color-ui的,我本身写css的话……那多是一个灾难。vue
前置知识:git
不知道你们有没有想过这几个问题?
复制代码
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组件的封装跟我们写的组件封装方式是差很少的!只是别人考虑的状况多。es6
区别嘛,也不大。只是别人封装好的组件帮我们考虑了N多种状况。github
我只会考虑到这些。由于个人项目就只有这些需求了,任务完成!npm
辣么vant呢?bash
能够看到考虑到了不少状况!已经能够知足大部分的需求了。app
WTF???? ui
<div
class="el-steps"
:class="[ !simple && 'el-steps--' + direction, simple && 'el-steps--simple' ]">
<slot></slot>
</div>
复制代码
那我们看看 element的step。this
好像都有一个slot 插槽。辣么这样就能明白了!
Tabbar 是一个父div,里面包裹着 TabbarItem。
这是一个很是累人的事情……搞很差被喷都很正常……
我已经作好被喷的准备了!!!!!!!!!!!
新建一个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;
复制代码
是的你没有看错……咱们已经写完一个可复用的组件了……😂
别开炮……代码还没写完……
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组件没啥区别撒???辣么就对了。
下一篇文章的话带你们封装一个tabbar!敬请期待。。。。。。。。。。。。。