开发一个UI框架项目[5]-Tabs

本文最后更新于:2020年9月25日 晚上

设计细节

  1. 结构分明。为了让结构层次更明显,在tabs-head里面有子组件tabs-item,在tabs-body里面有子组件tabs-pane,表示各自的标签与内容。

    但结构分明的同时也有些许缺陷,就是tabs-itemtabs-pane都要加上相同的name属性,对于喜欢“偷懒”的程序猿来说,多写一遍属性是比较麻烦的事情。

功能细节

  1. 组件通信。由于存在爷 -> 父 -> 孙组件的通信,为了让通信更方便,使用provideinject

  2. 事件通信。还是上面的原因,为了让多层组件的通信更简单,这里使用了事件总线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.jstabs-item.test.js文件。

因为tabs-panetabs-item基本一致,这里就不再做自动化测试了。

tabs.test.js文件有2个测试用例:测试tabs是否存在接收selected

tabs-item.test.js文件有4个测试用例:测试tabs-item是否存在接收name接收disabled点击事件

运行命令parcel watch test/* --no-cachekarma start查看测试结果:

tabs测试结果

vuepress

docs/.vuepress/components文件夹下增加多个tabs-demo的vue文件,内容就是我们要展示的tabs示例,然后在docs/components文件夹下增加tabs的md文件,内容就是放置整个tabs组件说明。

具体内容请访问这里


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!