button组件
1.需求分析

2.API设计

3. vue做了自动处理事件, 默认传到组件的根元素上

这里的onclick时间会被执行, 但是在button组件中没有进行任何处理

会默认传到button组件的根元素上
改变这种情况需要加个属性

继承属性改为false, 这样写在button上的事件等都不会生效
添加$attrs后, 所有的属性/方法 会在button上生效

如果想让div 和button都可以获取到外面传来的属性或方法 可以用下面的方法

4.剩余操作符
...rest

意思是:在context.attrs 中取出size, 剩下的变量放在rest中。然后在button中绑定rest,这样就可以在button中绑定除了size的其他属性或方法
5.小结

6.扩展运算符
{...xxx}

这个意思是把props这个对象展开再打印出来
7.props和attrs的区别

props必须先声明才能取值,才能打印出来, 如果不写红框里的内容就打印不粗来,是空的
props支持string以外的类型,而attrs只有string类型

比如在父组件写了disabled(=== disabled=true)
然后打印$attrs 发现disabled:' ' 是空字符串
在props中声明一下

打印props发现,是布尔类型

小结

8.动态绑定class

这个意思是 如果theme没传, 那么就不会有任何类,如果传了有值, 就会成 theme-xxx
9.flex&inline-flex
flex: 将对象作为弹性伸缩盒显示
inline-flex:将对象作为内联块级弹性伸缩盒显示
flex:父元素的尺寸不由子元素尺寸动态调整,不设置时默认是100%
inline-flex :则会使父元素尺寸跟随子元素们的尺寸动态调整
10. 库css的注意事项

为了防止更改全局样式, 所以需要限定一下, 匹配所有gulu-开头的, 或类名中含有空格+gulu- 的元素
这样写的话就可以匹配到 类似 <div class="xxx gulu-button">的元素了

11.使用计算属性设置class


12.如果在props中声明了,就不会继承了,需要手动写

总结

手绘风格的UI库
wired elements : https://wiredjs.com/showcase.html