开发一个UI框架项目[5]-Tabs
本文最后更新于:2020年9月25日 晚上
设计细节
- 结构分明。为了让结构层次更明显,在 - tabs-head里面有子组件- tabs-item,在- tabs-body里面有子组件- tabs-pane,表示各自的标签与内容。- 但结构分明的同时也有些许缺陷,就是 - tabs-item和- tabs-pane都要加上相同的- name属性,对于喜欢“偷懒”的程序猿来说,多写一遍属性是比较麻烦的事情。
功能细节
- 组件通信。由于存在爷 -> 父 -> 孙组件的通信,为了让通信更方便,使用 - provide和- inject。
- 事件通信。还是上面的原因,为了让多层组件的通信更简单,这里使用了事件总线eventBus,通过new一个vue实例,将这个实例通过provide传递,inject接收,来实现组件之间的事件通信。 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18- // tabs.vue
 import Vue from 'vue'
 export default {
 name: "YvTabs",
 provide() {
 return {
 eventBus: this.eventBus
 }
 },
 // ...
 data() {
 return {
 eventBus: new Vue()
 }
 },
 // ...
 }
人工测试
手动测试。。。已完成。
自动化测试
在test文件夹下增加tabs.test.js和tabs-item.test.js文件。
因为tabs-pane和tabs-item基本一致,这里就不再做自动化测试了。
tabs.test.js文件有2个测试用例:测试tabs是否存在、接收selected;
tabs-item.test.js文件有4个测试用例:测试tabs-item是否存在、接收name、接收disabled、点击事件。  
运行命令parcel watch test/* --no-cache和karma start查看测试结果:

vuepress
在docs/.vuepress/components文件夹下增加多个tabs-demo的vue文件,内容就是我们要展示的tabs示例,然后在docs/components文件夹下增加tabs的md文件,内容就是放置整个tabs组件说明。
具体内容请访问这里。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!