1. 安装 Element-UI

首先,我们需要安装 Element-UI。在终端中输入以下命令:

npm install element-plus
  1. 创建 Tab 页组件

在 src/components 目录下创建一个名为 Tabs.vue 的组件文件。代码如下:

<template>
  <div>
    <el-tabs v-model='activeName' @tab-click='handleClick'>
      <el-tab-pane label='Tab 1' name='1'>Content of Tab Pane 1</el-tab-pane>
      <el-tab-pane label='Tab 2' name='2'>Content of Tab Pane 2</el-tab-pane>
      <el-tab-pane label='Tab 3' name='3'>Content of Tab Pane 3</el-tab-pane>
    </el-tabs>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const activeName = ref('1');

    const handleClick = (tab) => {
      console.log(tab);
    };

    return {
      activeName,
      handleClick,
    };
  }
}
</script>

在这个组件中,我们使用了 Element-UI 的 <el-tabs><el-tab-pane> 组件来创建 tab 页。v-model='activeName' 用来绑定当前激活的 tab 页的名称,@tab-click='handleClick' 用来监听 tab 页的点击事件。在 setup() 函数中,我们使用了 Vue3 的 ref 函数来创建一个响应式的 activeName 变量,并定义了一个 handleClick 函数来处理 tab 页的点击事件。

  1. 在 App.vue 中使用 Tabs 组件

我们在 App.vue 组件中导入并使用 Tabs 组件。代码如下:

<template>
  <div id='app'>
    <Tabs />
  </div>
</template>

<script>
import Tabs from './components/Tabs.vue';

export default {
  name: 'App',
  components: {
    Tabs
  }
};
</script>

现在,我们可以在浏览器中看到一个带有三个 tab 页的页面。

  1. 添加动态 Tab 页

我们可以通过在 <el-tabs> 组件中动态添加 <el-tab-pane> 组件来创建动态 tab 页。在 Tabs.vue 组件中添加以下代码:

<template>
  <div>
    <el-tabs v-model='activeName' @tab-click='handleClick'>
      <el-tab-pane label='Tab 1' name='1'>Content of Tab Pane 1</el-tab-pane>
      <el-tab-pane label='Tab 2' name='2'>Content of Tab Pane 2</el-tab-pane>
      <el-tab-pane label='Tab 3' name='3'>Content of Tab Pane 3</el-tab-pane>
      <el-tab-pane v-for='(item, index) in tabs' :key='index' :label='item.label' :name='item.name'>{{ item.content }}</el-tab-pane>
    </el-tabs>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const activeName = ref('1');
    const tabs = ref([
      { label: 'Tab 4', name: '4', content: 'Content of Tab Pane 4' },
      { label: 'Tab 5', name: '5', content: 'Content of Tab Pane 5' },
      { label: 'Tab 6', name: '6', content: 'Content of Tab Pane 6' },
    ]);

    const handleClick = (tab) => {
      console.log(tab);
    };

    return {
      activeName,
      tabs,
      handleClick,
    };
  }
}
</script>

在这个代码中,我们通过 <el-tab-pane> 组件的 v-for 指令来动态创建 tab 页。在 setup() 函数中,我们使用了 Vue3 的 ref 函数来创建一个响应式的 tabs 变量,用来存储动态 tab 页的信息。

现在,我们可以在 tabs 数组中添加新的 tab 页信息,然后在浏览器中看到它们被动态添加到页面中。

  1. 添加关闭按钮

我们可以在每个 tab 页的标题栏上添加一个关闭按钮,以便用户可以关闭它们。在 Tabs.vue 组件中添加以下代码:

<template>
  <div>
    <el-tabs v-model='activeName' @tab-click='handleClick'>
      <el-tab-pane label='Tab 1' name='1'>Content of Tab Pane 1</el-tab-pane>
      <el-tab-pane label='Tab 2' name='2'>Content of Tab Pane 2</el-tab-pane>
      <el-tab-pane label='Tab 3' name='3'>Content of Tab Pane 3</el-tab-pane>
      <el-tab-pane v-for='(item, index) in tabs' :key='index' :label='item.label' :name='item.name'>
        {{ item.content }}
        <span class='close-tab' @click='closeTab(index)'>x</span>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const activeName = ref('1');
    const tabs = ref([
      { label: 'Tab 4', name: '4', content: 'Content of Tab Pane 4' },
      { label: 'Tab 5', name: '5', content: 'Content of Tab Pane 5' },
      { label: 'Tab 6', name: '6', content: 'Content of Tab Pane 6' },
    ]);

    const handleClick = (tab) => {
      console.log(tab);
    };

    const closeTab = (index) => {
      tabs.value.splice(index, 1);
    };

    return {
      activeName,
      tabs,
      handleClick,
      closeTab,
    };
  }
}
</script>

<style>
.close-tab {
  position: absolute;
  top: 6px;
  right: 10px;
  cursor: pointer;
  color: #999;
}
.close-tab:hover {
  color: #333;
}
</style>

在这个代码中,我们在每个 tab 页的内容区域中添加了一个关闭按钮。可以看到,我们在 setup() 函数中定义了一个 closeTab 函数,用来从 tabs 数组中删除指定的 tab 页。我们还为关闭按钮添加了一些 CSS 样式。

现在,我们可以在浏览器中看到每个 tab 页的标题栏上都有一个关闭按钮,点击它们可以关闭相应的 tab 页。


原文地址: https://www.cveoy.top/t/topic/nAez 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录