vue封装tabs组件案例详解

本文实例为大家分享了vue封装tabs组件案例的具体代码,供大家参考,具体内容如下

回顾封装tabs组件
熟知运用$children,$parent的案例
生成整个容器,通过$children拿取子组件

<template>
  <div class="ll-tabs">
    <div class="ll-tabs__header">
      <div
        class="ll-tabs__header__wrapper"
        v-if="tabsArray && tabsArray.length > 0"
      >
        <div
          v-for="tab in tabsArray"
          :key="tab.name"
          :class="`ll-tab__item ${activeName === tab.name ? 'is-active' : ''}`"
          @click="clickTab(tab)"
        >
          {{ tab.label }}
        </div>
      </div>
    </div>
    <div class="ll-tabs__body"><slot></slot></div>
  </div>
</template>
<script>
export default {
  name: "ll-tabs",
  props: ["value"],
  data() {
    return {
      tabsArray: [],
      activeName: this.value,
    };
  },
  watch: {
    value(val) {
      this.setCurrentName(val);
    },
  },
  mounted() {
    this.tabsArray = this.$children;
  },
  methods: {
    clickTab(tab) {
      this.activeName = tab.name;
      this.updateTab();
      this.$emit("change", tab);
    },
    updateTab() {
      this.$children.map((ele) => {
        console.log(ele);
        if (ele.name === this.activeName) {
          ele.currentShow = true;
          ele.load = true;
        } else {
          ele.currentShow = false;
        }
      });
    },
    setCurrentName(val) {
      this.activeName = val;
    },
  },
};
</script>
<style lang="scss" scoped>
.ll-tabs {
  width: 100%;
  height: auto;
  .ll-tabs__header {
    width: 100%;
    .is-active.ll-tab__item {
      background-color: aquamarine;
    }
    .ll-tabs__header__wrapper:before {
      color: white;
    }
    .ll-tabs__header__wrapper {
      width: 100%;
      display: flex;
      align-content: center;
      justify-content: flex-start;
      align-items: center;
      height: 30px;
      padding: 1px 0;
    }
    .ll-tab__item {
      width: fit-content;
      height: 30px;
      padding: 0 15px;
      font-size: 14px;
      background-color: transparent;
      z-index: 49;
      cursor: pointer;
      line-height: 30px;
      border: 1px rgba(100, 100, 100, 0.1) solid;
      border-right: none;
      &:last-of-type {
        border-right: 1px rgba(100, 100, 100, 0.1) solid;
      }
    }
  }
}
.ll-tabs__body {
  padding: 10px 0;
  height: auto;
  background-color: transparent;
}
</style>

生成子组件,展示每个tab。

<template>
  <div
    v-if="!lazy || loaded || currentShow"
    v-show="currentShow"
    :class="`ll-tab-pane tab-${name}`"
  >
    <slot></slot>
  </div>
</template>
<script>
export default {
  name: "ll-tab-pane",
  props: {
    label: String,
    name: String,
    lazy: Boolean,
  },
  data() {
    return {
      currentShow: false,
      loaded: false,
    };
  },
  mounted() {
    this.$parent.updateTab();
  },
};
</script>

使用

 <llTabs v-model="activeName">
    <llTabsPane name="first" label="first">first</llTabsPane>
    <llTabsPane name="second" label="second">second</llTabsPane>
    <llTabsPane name="third" label="third">third</llTabsPane>
  </llTabs>
import { llTabs, llTabsPane } from "@/components/tabs";
export default {
  components: { llTabs, llTabsPane },
  }

展示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Vue.js组件tabs实现选项卡切换效果

    今天给大家分享一个小颖自己写的vue组件,因为小颖也才接触vue没多久,如果有什么不足的地方,希望大家提出来,小颖加以改正.以下就是具体如何实现tabs啦. 调用示例: <template> <div class="tabs-contents"> <!-- 调用tabs组件 --> <tabs :flag.sync='tabsShowFlag' :navtitle='navTitle' :navdata='navData'> <di

  • vue使用动态组件实现TAB切换效果

    问题描述 tab切换的场景在开发中会经常用到.当需要实现这种效果的时候,我们常常会想到下面的方式去实现这个效果. 方式一 使用display:none;去控制dom元素的显示与隐藏.从而实现,两个tab的显示与隐藏.不过如果有三四个tab要切换的话,这种方式就不可取了. 方式二 使用vue中的指令v-if或者v-show实现.这种方式可以实现,不过代码写的不优雅.试想一个.vue文件中出现一大把v-if是什么样的效果?而且使用v-if还得声明很多的变量去做标识.所以不是十分好的的解决方案 方式三

  • vue实现tab路由切换组件的方法实例

    前言 本文介绍的是使用vue自带的vue-router.js路由实现分页切换功能,下面话不多说了,来一起看看详细的实现代码吧 实现图片如下 下列为实现代码 css: *{ margin: 0; padding: 0; } #app ul{ width: 300px; height: 30px; list-style: none; } #app>ul>li{ width: 100px; height: 30px; float: left; } html: <div id="app

  • vue.js移动端tab组件的封装实践实例

    这是vue.js系列文章第二遍,第一篇讲述的是如何搭建vue.js的开发环境,计划按进度做成一款完整的app,当然前提是时间允许的话.本文用到了stylus语法,至于为什么使用stylus而不去用sass,主要是因为stylus来自于Node.js社区.总之stylus是一款高效的CSS预处理器,具体使用不在本文讨论范围.好了,废话不说了,下面讲述怎么封装tababr的切换. 底部tab进行页面切换,会用到vue里面的路由,也就是vue-router 我们在安装vue-cli时选中默认安装vu

  • Vue切换Tab动态渲染组件的操作

    使用<component :is="组件名"></component> 结合Element-UI的导航菜单 : UI组件 el-menu-item里的index写对应的组件名 点击事件@select="handleSelect" <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal&quo

  • vue组件开发之tab切换组件使用详解

    本文实例为大家分享了vue组件开发之tab切换组件的具体使用代码,供大家参考,具体内容如下 代码: <template> <div class="tab-slider"> <div class="tab"> <span v-for="(item, index) in items" v-bind:class="{active: actived == index}" @click=&quo

  • Vue可自定义tab组件用法实例

    在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间. 如何使用? 1. 首先先安装: npm i vue-cus-tabs -S 2. 在new vue之前引入样式并use一下VueCusTab: import 'vue-cus-tabs/style/index.css' import { installCusTabs } from 'vue-cus-tabs';

  • Vue.js组件tab实现选项卡切换

    本文实例为大家分享了vue插件tab选项卡的具体代码,供大家参考,具体内容如下 效果图: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> *{padding: 0;margin:

  • 详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)

    在 vue 中,实现 Tab 切换主要有三种方式:使用动态组件,使用 vue-router 路由,使用第三方插件. 因为这次完成的功能只是简单切换组件,再则觉得使用路由切换需要改变地址略微麻烦,所以使用的是动态组件实现,如果是在大型应用上,可能使用 vue-router 会方便一些. 先看下最终实现的效果,结构比较简单,顶部的三个 Tab 标签用于切换,内容区域分别为三个子组件. 效果预览 关键代码及分析如下: <template> // 每一个 tab 绑定了一个点击事件,传入的参数对应着

  • Vue2.0 多 Tab切换组件的封装实例

    Vue2.0 多 Tab切换组件简单封装,满足自己简单的功能,可以直接拿去使用! 首先上效果图: 功能简单介绍: 1.支持tab切换 2.支持tab定位 3.支持tab自动化 仿React多Tab实现,总之可以正常使用满足日常需求, 1.使用方法: ==index.vue文件== <TabItems> <div name="买入" class="first"> <Content :isContTab = "0" /&

  • Vue render函数实战之实现tabs选项卡组件

    用过Element ui库的童鞋肯定知道<el-tabs>组件,简单.好用.可以自定义标签页,不知道广大童鞋们在刚开始使用<el-tabs>组件的时候有没有想过它是如何实现的?我咋刚开始使用<el-tabs>组件的时候就有去想过,也想去实现一个超级简单的tabs选项卡组件,无奈当时功力不够,未能实现.最近的一个简单项目中正好要用到选项卡组件,由于项目简单也就没有使用任何第三方库,于是就自己动手写了个选项卡组件. 1.实现tabs选项卡组件的思考 <el-tabs

随机推荐