vue封裝tabs組件案例詳解
本文實(shí)例為大家分享了vue封裝tabs組件案例的具體代碼,供大家參考,具體內(nèi)容如下
回顧封裝tabs組件
熟知運(yùn)用$children,$parent
的案例
生成整個(gè)容器,通過$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>
生成子組件,展示每個(gè)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 }, ? }
展示
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue實(shí)現(xiàn)tab路由切換組件的方法實(shí)例
- vue使用動(dòng)態(tài)組件實(shí)現(xiàn)TAB切換效果
- Vue切換Tab動(dòng)態(tài)渲染組件的操作
- vue組件開發(fā)之tab切換組件使用詳解
- Vue可自定義tab組件用法實(shí)例
- Vue render函數(shù)實(shí)戰(zhàn)之實(shí)現(xiàn)tabs選項(xiàng)卡組件
- 詳解vue2.0 使用動(dòng)態(tài)組件實(shí)現(xiàn) Tab 標(biāo)簽頁切換效果(vue-cli)
- Vue2.0 多 Tab切換組件的封裝實(shí)例
- vue.js移動(dòng)端tab組件的封裝實(shí)踐實(shí)例
- Vue.js組件tab實(shí)現(xiàn)選項(xiàng)卡切換
- Vue.js組件tabs實(shí)現(xiàn)選項(xiàng)卡切換效果
相關(guān)文章
使用vuex解決刷新頁面state數(shù)據(jù)消失的問題記錄
這篇文章主要介紹了使用vuex解決刷新頁面state數(shù)據(jù)消失的問題記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Vue自定義指令上報(bào)Google Analytics事件統(tǒng)計(jì)的方法
我們經(jīng)常需要接入統(tǒng)計(jì)服務(wù)以方便運(yùn)營,這篇文章主要介紹了Vue自定義指令上報(bào)Google Analytics事件統(tǒng)計(jì)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02vue項(xiàng)目登錄成功拿到令牌跳轉(zhuǎn)失敗401無登錄信息的解決
這篇文章主要介紹了vue項(xiàng)目登錄成功拿到令牌跳轉(zhuǎn)失敗401無登錄信息的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽機(jī)制問題及實(shí)現(xiàn)思路
這篇文章主要介紹了淺析Proxy可以優(yōu)化vue的數(shù)據(jù)監(jiān)聽機(jī)制問題及實(shí)現(xiàn)思路,需要的朋友可以參考下2018-11-11vuex實(shí)現(xiàn)簡易計(jì)數(shù)器
這篇文章主要為大家詳細(xì)介紹了vuex實(shí)現(xiàn)一個(gè)簡易計(jì)數(shù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10