使用elementui制作menu菜单栏与tabs标签页

<el-tabs  v-model="activeIndex"  type="card"  @tab-click="clickTab"  @tab-remove="removeTab"  closable>

        <el-tab-pane  v-for="item of openTab"  v-show="openTab.length"  :key="item.name"  :label="item.name"  :name="item.route" ></el-tab-pane>

</el-tabs>

思路:(本人不喜欢用vuex,所有数据写在一个页面里)

1.        data里面要有一个openTab数组,用来存放跳转过的地址,还要有一个activeindex,当作激活当前的tabs栏;

2.        在mouted里面写代码,在判断1里面判断this.openTab.length是否小于0,再在判断1里面进行判断2当前路由如果不是首页,往openTab里面添加一个首页信息、一个当前路由信息,并设置this.activeindex为当前路由来激活tabs栏,判断2的else(即当前路由是首页),则openTab添加一个首页信息,并设置this.activeindex为首页

3.        监听路由,当路由跳转时,判断this.openTab是否有当前路由的信息,有则设置this.activeindex为当前路由来激活tabs栏,如果没有,则往this.openTab里面添加当前路由的信息,并且设置this.activeindex为当前路由来激活tabs栏

4.        methods里面3个方法,一、删除tabs栏某一项(即删除this.openTab某一项数据),并激活this.openTab下一个路由信息的方法(removeTab);二、点击跳转时跳转路由(clickTab)

最后一点,耐心去理解代码,总会有所收获!

下面是代码:

<template>

    <div>

        <el-tabs

            v-model="activeIndex"

            type="card"

            @tab-click="clickTab"

            @tab-remove="removeTab"

            closable

        >

        <!-- v-if可用v-show代替,也可考虑使用计算属性代替v-for与v-if功能 -->

            <el-tab-pane

                v-for="item of openTab"

                v-if="openTab.length"

                :key="item.name"

                :label="item.name"

                :name="item.route"

            >

            </el-tab-pane>

        </el-tabs>

        <router-view />

    </div>

</template>

<script>

export default {

    data(){

        return {

            openTab:[],

            activeIndex:''

        }

    },

    methods:{

        set_active_index(index){

            this.activeIndex = index

        },

        add_tabs(data){

            this.openTab.push(data)

        },

        delete_tabs(route){

            let index = 0

            for(let gohh of this.openTab){

                if(gohh.route == route){

                break

                }

                index++

            }

            this.openTab.splice(index,1)

        },

        clickTab() {

            this.$router.push({path: this.activeIndex})

            console.log(this.$route.path)

        },

        removeTab (target) {

            if(target == '/page1'){

                return

            }

            this.delete_tabs(target)

            if (this.activeIndex === target) {

                if (this.openTab && this.openTab.length >= 1) {

                    console.log('=============', this.openTab[this.openTab.length - 1].route)

                    this.set_active_index(this.openTab[this.openTab.length - 1].route)

                    this.$router.push({path: this.activeIndex})

                }

            }

        }

    },

    watch: {

        '$route' (to, from) {

            console.log('跳转了')

            let flag = false

            for (let item of this.openTab) {

                if (item.name === to.name) {

                    this.set_active_index(to.path)

                    flag = true

                    break

                }

            }

            if (!flag) {

                this.add_tabs({route: to.path, name: to.name})

                this.set_active_index(to.path)

            }

        }

    },

    mounted () {

        console.log('mounted')

        console.log('mounted1',this.openTab)

        if(this.openTab.length>=1){

        }else{

            if(this.$route.path !== '/page1') {

                console.log('mounted222222',this.openTab)

                this.add_tabs({route: '/page1' , name: '商户信息'})

                this.add_tabs({route: this.$route.path , name: this.$route.name })

                this.set_active_index(this.$route.path)

            }else{

                this.add_tabs({route: '/page1', name: '商户信息'})

                this.set_active_index('/page1')

            }

        }

    }

}

</script>

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 下面是一个使用 ElementUItabs 标签的实例: ```html <template> <div> <el-tabs v-model="activeTab"> <el-tab-pane label="标签1" name="tab1"></el-tab-pane> <el-tab-pane label="标签2" name="tab2"></el-tab-pane> <el-tab-pane label="标签3" name="tab3"></el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeTab: 'tab1' } } } </script> ``` 这里使用了 `el-tabs` 和 `el-tab-pane` 组件,通过绑定 `v-model` 属性来控制当前激活的标签。 ### 回答2: ElementUI是一款基于Vue.js的组件库,提供了包括tabs标签在内的众多组件。tabs标签是非常常用的一种组件,可以用来切换不同的内容或面。 首先,我们需要在Vue项目中安装和导入ElementUI库,具体方法可查看官方文档。然后,在需要使用tabs标签面中,可以使用以下代码来创建一个简单的tabs标签: ```html <el-tabs v-model="activeTab"> <el-tab-pane label="标签1">标签1的内容</el-tab-pane> <el-tab-pane label="标签2">标签2的内容</el-tab-pane> <el-tab-pane label="标签3">标签3的内容</el-tab-pane> </el-tabs> ``` 其中,v-model指定了当前显示的标签,activeTab为一个变量名,可在Vue中声明。el-tab-pane为每个标签标签,label属性指定标签名,标签的内容在标签中间填写即可。 如果需要添加更多的标签,只需按照以上格式继续添加el-tab-pane即可。同时,ElementUI也提供了丰富的API和样式调整选项,可按需求进行调整和使用。 需要注意的是,tabs标签在移动端可能会显示不完整,此时可以通过el-tabs的属性进行调整,如增加type属性值为border-card、small等: ```html <el-tabs v-model="activeTab" type="border-card" small> &hellip;&hellip; </el-tabs> ``` 总的来说,ElementUItabs标签是一个方便实用的组件,能够帮助我们快速实现界面设计中的面切换需求。 ### 回答3: ElementUI 是基于 Vue.js 开发的一套组件库,其中的 Tabs 标签是其常用的组件之一。Tabs 组件可以方便地将内容划分为多个标签,并实现即时切换和动态添加、删除标签的功能。下面将介绍如何使用 ElementUITabs 组件实现标签切换。 首先,需要在 Vue 项目中导入 ElementUI 组件库和样式表。可以在 main.js 中全局引入: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 接下来,在需要使用 Tabs 的组件中引入 Tabs 组件,并在模板中使用 Tabs 组件生成标签菜单和标签内容。Tabs 有两种使用方式:通过直接使用 <el-tabs> 和 <el-tab-pane> 组件生成标签,或通过传入标签配置对象生成标签(建议使用第二种方式)。以下是第二种方式的示例代码: ```html <template> <div> <el-tabs v-model="activeName" closable @tab-remove="handleRemove"> <el-tab-pane v-for="tab in tabs" :key="tab.id" :label="tab.name" :name="tab.id"> <div>{{tab.content}}</div> </el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeName: '1', tabs: [ { id: '1', name: 'Tab 1', content: 'This is the content of tab 1' }, { id: '2', name: 'Tab 2', content: 'This is the content of tab 2' }, { id: '3', name: 'Tab 3', content: 'This is the content of tab 3' } ] } }, methods: { handleRemove(targetName) { const tabs = this.tabs const activeName = this.activeName if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.id === targetName) { const nextTab = tabs[index + 1] || tabs[index - 1] if (nextTab) { activeName = nextTab.id } } }) } this.tabs = tabs.filter(tab => tab.id !== targetName) this.activeName = activeName } } } </script> ``` 在上述代码中,tabs 数组中存储了标签的配置对象,其中 id 用于表示标签的名称,name 用于表示标签的显示名称,content 表示标签的内容。使用 v-for 循环遍历 tabs 数组,生成标签菜单和标签内容。 Tabs 组件的 v-model 属性用于绑定当前激活的标签名称,通过设置 activeName 数据实现改变激活标签。closable 属性设置选项卡是否可关闭,@tab-remove 监听选项卡关闭的事件并调用 handleRemove 方法进行处理。其中,handleRemove 方法的逻辑是:如果关闭的是当前激活的标签,则显示下一个标签的内容,如果没有下一个标签,则显示前一个标签的内容。处理完后,更新 tabs 数组和 activeName 数据,实现即时切换和动态添加、删除标签的功能。 除了上述功能,ElementUITabs 组件还提供了多种样式、位置和尺寸的配置选项,可以根据实际需求进行调整。使用 ElementUITabs 组件可以方便地实现标签切换,提升用户体验和应用交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值