美文网首页
造轮子-tab组件(上)

造轮子-tab组件(上)

作者: Ories | 来源:发表于2020-01-27 19:43 被阅读0次

1. 如何解决之前遗留的bug

  1. 根据错误提示大概确定原因,toast.test.js .style 造成。
  2. 用二分法找bug到底是哪一个用例出错。
  3. log+分析代码,mounted和nextTick是有时间间隙的,得到原因测试用例中mount完了之后立刻click,click之后再nextTick设置高度,所以可能是click太快了,此时s当$nextTick的时候,已经toast已经被我们关掉了,所以无法设置高度,那么解决方案就是我们就需要模拟用户点击,200ms后再点击
        // toast.test.js
        setTimeout(()=>{
            closeButton.click()
            expect(callback).to.have.been.called
            done()
        },200)

2. 对tabs进行需求分析,每一个组件都要进行四步

  1. 需求
  2. ui
  3. 代码
    • 先考虑用户怎么用
      // elementUI的使用方法一
      <g-tabs>
          <g-tabs-item label="美女">
              <div>
                  美女相关咨询
              </div>
          </g-tabs-item>
          <g-tabs-item label="世界杯">
              <div>
                  世界杯相关咨询
              </div>
          </g-tabs-item>
      </g-tabs>   
      
      // elementUI的使用方法二,加icon
      // 这种使用方法有个问题,tab上加背景色没办法加
      <g-tabs>
          <g-tabs-item slot="label">
              <g-icon>  
                  美女相关咨询
              </g-icon>
          </g-tabs-item>
      </g-tabs>
      
      // 我们设计的使用方式,这种方式改背景色就很简单直接在g-tabs-nav上添加就可以了。
      <g-tabs selected="tab1">
          <g-tabs-nav>
              <g-tabs-item name="tab1"></g-tabs-item> 
              <g-tabs-item name="tab2"></g-tabs-item> 
          </g-tabs-nav>
          <g-tabs-content>
              <g-tabs-pane name="tab1"></g-tabs-pane>
              <g-tabs-pane name="tab2"></g-tabs-pane>
          </g-tabs-content>
      </g-tabs>   
      
  4. 测试

3. 新建5个组件

        // tabs.vue
        // tabs-head
        // tabs-body
        // tabs-item
        // tabs-pane

4. 子组件不能改父组件的值,一定要通过通知父组件,让父组件来改

    // 这么写的原因
    <!-- <g-tabs selected="selectedTab" @update:selected="selectedTab = $event">  -->
    <!-- 这句话是语法糖完全等价上面一句 -->
    <g-tabs :selected.sync="selectedTab"> 
        <g-tabs-head>
            <g-tabs-item name="woman">
                美女
            </g-tabs-item>
        </g-tabs-head>
        <g-tabs-body>
            <g-tabs-pane name="woman">
                美女相关咨询
            </g-tabs-pane>
        </g-tabs-body>
    </g-tabs>

5.添加 tabs 相关组件的基本 props,之后开始完善

    // tabs.vue
    props: {
        selected: {
            type: String,
            required: true
        }
    },
    direction: {
        type: String,
        default: 'horizontal',
        validator(value){
            return ['horizontal', 'vertical'].indexOf(value) >= 0
        }
    },
    created(){
        // this.$emit('update:selected','xxx')
    }

    // tabs-item.vue
     props: {
      disabled: {
        type: Boolean,
        default: false
      }
    }
    
    // 为了实现右边有个按钮的功能
    // tabs-head
    <div class="tabs-head">
        <slot></slot>
        <slot name="actions"></slot>
    </div>
    // index.html
    <g-tabs :selected.sync="selectedTab">
        <g-tabs-head>
            <template slot="actions">
                <button>设置</button>
            </template>
        </g-tabs-head>
    </g-tabs>

相关文章

  • 造轮子-tab组件(上)

    1. 如何解决之前遗留的bug 根据错误提示大概确定原因,toast.test.js .style 造成。 用二分...

  • 造轮子-tab组件(中)

    1. 如果给一个标签一个class,标签本身又有class,vue是默认会合并的。只有两个属性是这样一个是clas...

  • Vue造轮子-tab组件(下)

    1. 为什么一个 new Vue 可以构造出一个 eventBus 2. 开始写 CSS 样式 3.激活属性 ac...

  • Vue造轮子-popover组件(上)

    1. popover是什么以及难点在哪 点一下出现一个卡片,也叫气泡卡片 难点在于css的样式 2. 用户会怎么去...

  • 造轮子-nav组件

    补充知识:如果你需要相对引用你得加一个./否则会被认为你是在引用一个第三方库比如: 首先我们需要三个组件分别是na...

  • 造轮子-sticky组件

    最初的api设计 上面的api就是接受一个distance参数,意思是距离顶部多少距离的时候固定住 当需要通过滚动...

  • 2019-05-31 程序员修仙进阶标准,你到哪个阶段了?

    闭门造轮子 > 使用别人的轮子 > 开门造轮子 > 分享轮子

  • android 组件设计 - 权限组件封装

    美女镇楼 有轮子就不要再自己造轮子了,这是行业公认的,我这里不是从头写一个权限库,而是在开源组件上再封装以统一公司...

  • 自定义组件相关知识点

    自定义组件的步骤 以tab切换组件为例 创建自定义组件创建components/tab文件夹在tab上右键,新建C...

  • 自定义组件的知识点

    自定义组件的步骤 以tab切换组件为例 创建自定义组件创建components/tab文件夹在tab上右键,新建C...

网友评论

      本文标题:造轮子-tab组件(上)

      本文链接:https://www.haomeiwen.com/subject/qyvethtx.html