darkti UI—tab切换页

2020-06-23  本文已影响0人  darkTi

一、思路

思路.png
eventBus.png
  1. 点击items改变选中的item(运用.sync修饰符,就是子组件里prop的值改变时,父组件的值也同步变化),子组件触发事件的代码一定要写上!!!相当于只是监听的形式改变了一下;(在点击item的时候tabs上的selected属性是不需要改变的)
     <d-tabs :selected="selectedItem" @update:selected="selectedItem = $event">
    //上一句等同于<d-tabs :selected.sync="selectedItem">
            <d-tabs-head>
                <d-tabs-item name="entertainment">娱乐</d-tabs-item>
                <d-tabs-item name="society">社会</d-tabs-item>
                <d-tabs-item name="sports">体育</d-tabs-item>
            </d-tabs-head>
            <d-tabs-body>
                <d-tabs-pane name="entertainment">这里是娱乐</d-tabs-pane>
                <d-tabs-pane name="society">这里是社会</d-tabs-pane>
                <d-tabs-pane name="sports">这里是体育</d-tabs-pane>
            </d-tabs-body>
        </d-tabs>

2、tabs-head中的<slot name="actions"></slot>,相当于tabs-head中有两个插槽;

//html中这样用
<template slot="actions">
      <button>设置</button>
</template>

二、通过eventBus统一管理事件

1、 tabs-items和tabs-pane上需要加个active来控制它是否被选中,那么这个active是放在data里还是props里呢?你要根据active的特性来判断了;

三、给tabs加上滑动的下border

1、在tabs-head里加个div,单独当做下划线,给它定个位;
2、我们要获取到一开始selected的那个元素实例,并把它传出来(在tabs里找);
3、还要获取到点击的那个item的元素实例,同样把它传出来(在tabs-item里找);
4、在tabs-head里监听"update:selected"事件,获得传出来的item名字和实例,并获取到实例元素的左边距和宽度,把它们赋值给下划线div;最后加个过渡事件就大功告成;

四、单元测试

1、当<d-tabs>下的子元素不是<d-head>时,应该给个警告;

<d-tabs>
    <div>hi</div>
</d-tabs>
上一篇 下一篇

猜你喜欢

热点阅读