一 , Element-UI tabs标签实现点击左右箭头 实现左右tab栏按个选中切换(正常是只会切换到后面空白tab栏 不会选中) .........二 , tabs标签切换不同的模板样式

文章展示了如何在Vue.js中创建一个带有左右箭头切换功能的tabs组件,并通过具名插槽实现不同模板样式的切换。通过data和methods处理导航索引,以及在父组件中定义具名插槽内容,实现了动态渲染不同页面样式。
摘要由CSDN通过智能技术生成
      <!-- 导航栏 -->
                <div class="TAb">
                    <div class="xiangzuo" @click="leftChange()">
                        <!-- 左箭头 -->
                        <i class="el-icon-arrow-left"></i>
                    </div>

                <el-tabs class="TAB" v-model="activeIndex" @tab-click="handleClick" 
                      scrollable="true" >
                    <el-tab-pane v-for="(item, index) in data" :key="item.id" 
                          :label="item.label" :name="index.toString()">
                        <!-- 定义不同的切换列表样式  切换不同样式使用的插槽(没这需求可不写)-->
                         <slot :name="item.label" :index="item.id" />
                    </el-tab-pane>
                </el-tabs>

                    <div class="xiangyou" @click="rightChange()">
                        <!-- 右箭头 -->
                        <i class="el-icon-arrow-right"></i>
                    </div>
            </div>


//xiangzuo , xiangyou 是左右箭头 定位到tab栏左右两侧
value / v-model绑定值,选中选项卡的 name

定义导航索引值 以及虚拟数据

data(){
    return(){
             activeIndex: "0",
             // 导航列表
            data: [
                {
                    id: 0,
                    label: '熊大',
                    name:'one'
                },
                {
                    id: 1,
                    label: '熊二',
                    name:'two'
                },
                {
                    id:2,
                    label: '光头强',
                    name:'there'
                },
                {
                    id: 3,
                    label: '李老板',
                    name:'four'
                },
            ],
    }
}

使用左右箭头方法

    methods: {
         // 导航栏左右箭头切换
        leftChange() {
            let num = Number(this.activeIndex)
            num > 0 && num--
            this.activeIndex = num.toString()
        },
        rightChange() {
            let num = Number(this.activeIndex)
            // this.data.length 数组长度
            num < this.data.length - 1 && num++
            this.activeIndex = num.toString()

        },
    }

到这里就实现左右箭头选中按个切换了

  顺带再拓展一下

二 , tabs标签切换的不同模板样式

需求肯定不会这么简单的 官网给定的模板是切换渲染不同的标题 但在真实场景下每个页面的模板样式肯定不会是一样的 所以我们需要封装组件 以插槽的形式渲染不同的模板样式

//Tabs组件   
   <!-- 导航栏 -->
                <div class="TAb">
                    <div class="xiangzuo" @click="leftChange()">
                        <!-- 左箭头 -->
                        <i class="el-icon-arrow-left"></i>
                    </div>

                <el-tabs class="TAB" v-model="activeIndex" @tab-click="handleClick"                                         
                         scrollable="true" >
                                      //data 父组件传递过来的数据
                    <el-tab-pane v-for="(item, index) in data" :key="item.id" 
                           :label="item.label" :name="index.toString()">
                        <!-- 定义不同的切换列表样式 -->
                         <slot :name="item.label" :index="item.id" />
                    </el-tab-pane>
                </el-tabs>

                    <div class="xiangyou" @click="rightChange()">
                        <!-- 右箭头 -->
                        <i class="el-icon-arrow-right"></i>
                    </div>
            </div>



//props 接收
  props: {
         data: {
            type: Array,
            default: () => [],
        },
        defaultActiveTab: {
            type: String,
            default: ""
        }
    },
    data() {
        return {
            activeIndex: "0",
        };
    }, 


//methods 切换方法
 methods: {
         // 导航栏左右箭头切换
        leftChange() {
            let num = Number(this.activeIndex)
            num > 0 && num--
            this.activeIndex = num.toString()
        },
        rightChange() {
            let num = Number(this.activeIndex)
            num < this.data.length - 1 && num++
            this.activeIndex = num.toString()

        },
        // 切换tab栏方法
        handleClick(tab) {
            this.activeIndex = tab.name
        },
    },

2.在父组件中引用并定义具名插槽名字 

// 引入tab组件
import Tabs from './components/Tabs.vue';
 <Tabs :data="activeList" :defaultActiveTab="'tab1'" class="tabs">
                        //#绑定的具名插槽的名字
               <template #地名信息>
                  <div class="info">
                    <div  v-for="item in  listTitle" :key="item.id">
                          <div class="text-container">
                            <span class="first">{{ item.title }}:  </span> <span 
                               class="text">这里是文本内容,当文本内容过长时会自动换行,而不会 
                               影响到布局。</span>
                          </div>
                    </div>
                </div>
              </template>
              <template #配置管理>
                <div class="tab-content-2">标签页2的内容</div>
              </template>
              <template #商品管理>
                <div class="tab-content-3">标签页3的内容</div>
              </template>
              <template #库存管理>
                <div class="tab-content-3">标签页4的内容</div>
              </template>
</Tabs>

//贴上数据格式

             // 导航列表
        activeList: [
        {
          id: 0,
          label: '地名信息',
          name: 'one'
        },
        {
          id: 1,
          label: '配置管理',
          name: 'two'
        },
        {
          id: 2,
          label: '商品管理',
          name: 'there'
        },
        {
          id: 3,
          label: '库存管理',
          name: 'four'
        },],

//附上效果图

续写: 可能测试的时候也是稍微有点问题 大家可以参考我最新补充的

最新修改的

是的,使用 element-ui 中的 Tabs 组件可以很方便地实现 Tab 点击切换内容的效果,并且也可以自定义样式。 首先,在需要使用 Tabs 组件的页面中引入 Tabs 组件: ```vue <template> <el-tabs v-model="activeTab"> <el-tab-pane label="Tab 1">Content of Tab Pane 1</el-tab-pane> <el-tab-pane label="Tab 2">Content of Tab Pane 2</el-tab-pane> <el-tab-pane label="Tab 3">Content of Tab Pane 3</el-tab-pane> </el-tabs> </template> <script> import { Tabs, TabPane } from 'element-ui'; export default { components: { 'el-tabs': Tabs, 'el-tab-pane': TabPane }, data() { return { activeTab: 'Tab 1' } } } </script> ``` 在上面的示例中,我们使用了 `el-tabs` 和 `el-tab-pane` 组件来创建 Tabs,并且使用 `v-model` 指令来绑定当前选中TabTabs 中的每个 Tab 都由 `el-tab-pane` 组件来表示,它们的 `label` 属性用来设置 Tab 的显示名称,而标签对之间的内容则是 Tab 的内容。 可以在 `el-tabs` 组件上添加 `type` 属性来设置 Tab 的类型,比如 `card` 表示卡片式的 Tab,`border-card` 表示带边框的卡片式 Tab 等等。 ```vue <template> <el-tabs v-model="activeTab" type="card"> <el-tab-pane label="Tab 1">Content of Tab Pane 1</el-tab-pane> <el-tab-pane label="Tab 2">Content of Tab Pane 2</el-tab-pane> <el-tab-pane label="Tab 3">Content of Tab Pane 3</el-tab-pane> </el-tabs> </template> <script> import { Tabs, TabPane } from 'element-ui'; export default { components: { 'el-tabs': Tabs, 'el-tab-pane': TabPane }, data() { return { activeTab: 'Tab 1' } } } </script> ``` 除此之外,我们也可以自定义 Tab样式,比如设置 Tab 的背景色、文字颜色、边框等等: ```vue <template> <el-tabs v-model="activeTab" class="custom-tab"> <el-tab-pane label="Tab 1">Content of Tab Pane 1</el-tab-pane> <el-tab-pane label="Tab 2">Content of Tab Pane 2</el-tab-pane> <el-tab-pane label="Tab 3">Content of Tab Pane 3</el-tab-pane> </el-tabs> </template> <script> import { Tabs, TabPane } from 'element-ui'; export default { components: { 'el-tabs': Tabs, 'el-tab-pane': TabPane }, data() { return { activeTab: 'Tab 1' } } } </script> <style scoped> .custom-tab .el-tabs__header { background-color: #f2f2f2; border-radius: 4px; } .custom-tab .el-tabs__item.is-active { color: #fff; background-color: #409EFF; border-color: #409EFF; } .custom-tab .el-tabs__item { color: #606266; border-color: #dcdfe6; } </style> ``` 在上面的示例中,我们为 `el-tabs` 组件添加了一个名为 `custom-tab` 的 class,然后在样式表中设置了该 class 下的 Tab样式。这样就可以实现自定义样式的效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值