• ElementUI浅尝辄止31:Tabs 标签页


    选项卡组件:分隔内容上有关联但属于不同类别的数据集合。

    常见于网站内容信息分类或app内容信息tab分类

    1.如何使用?

    Tabs 组件提供了选项卡功能,默认选中第一个标签页,你也可以通过 value 属性来指定当前选中的标签页。

    1. <script>
    2. export default {
    3. data() {
    4. return {
    5. activeName: 'second'
    6. };
    7. },
    8. methods: {
    9. handleClick(tab, event) {
    10. console.log(tab, event);
    11. }
    12. }
    13. };
    14. script>

    2.选项卡样式

    选项卡样式的标签页。

    1. 只需要设置 type 属性为 card 就可以使选项卡改变为标签风格。
    2. <script>
    3. export default {
    4. data() {
    5. return {
    6. activeName: 'first'
    7. };
    8. },
    9. methods: {
    10. handleClick(tab, event) {
    11. console.log(tab, event);
    12. }
    13. }
    14. };
    15. script>

    3.卡片化

    卡片化的标签页。

    1. 将type设置为border-card。
    2. "border-card">
    3. <el-tab-pane label="用户管理">用户管理el-tab-pane>
    4. <el-tab-pane label="配置管理">配置管理el-tab-pane>
    5. <el-tab-pane label="角色管理">角色管理el-tab-pane>
    6. <el-tab-pane label="定时任务补偿">定时任务补偿el-tab-pane>

    4.选项卡位置调整

    可以通过 tab-position 设置标签的位置

    1. 标签一共有四个方向的设置 tabPosition="left|right|top|bottom"
    2. <script>
    3. export default {
    4. data() {
    5. return {
    6. tabPosition: 'left'
    7. };
    8. }
    9. };
    10. script>

    5.自定义标签页

    可以通过具名 slot 来实现自定义标签页的内容

    1. "border-card">
    2. <el-tab-pane>
    3. <span slot="label"><i class="el-icon-date">i> 我的行程span>
    4. 我的行程
    5. el-tab-pane>
    6. <el-tab-pane label="消息中心">消息中心el-tab-pane>
    7. <el-tab-pane label="角色管理">角色管理el-tab-pane>
    8. <el-tab-pane label="定时任务补偿">定时任务补偿el-tab-pane>

    6.动态增减标签页

    增减标签页按钮只能在选项卡样式的标签页下使用

    1. "editableTabsValue" type="card" editable @edit="handleTabsEdit">
    2. <el-tab-pane
    3. :key="item.name"
    4. v-for="(item, index) in editableTabs"
    5. :label="item.title"
    6. :name="item.name"
    7. >
    8. {{item.content}}
    9. el-tab-pane>
    10. <script>
    11. export default {
    12. data() {
    13. return {
    14. editableTabsValue: '2',
    15. editableTabs: [{
    16. title: 'Tab 1',
    17. name: '1',
    18. content: 'Tab 1 content'
    19. }, {
    20. title: 'Tab 2',
    21. name: '2',
    22. content: 'Tab 2 content'
    23. }],
    24. tabIndex: 2
    25. }
    26. },
    27. methods: {
    28. handleTabsEdit(targetName, action) {
    29. if (action === 'add') {
    30. let newTabName = ++this.tabIndex + '';
    31. this.editableTabs.push({
    32. title: 'New Tab',
    33. name: newTabName,
    34. content: 'New Tab content'
    35. });
    36. this.editableTabsValue = newTabName;
    37. }
    38. if (action === 'remove') {
    39. let tabs = this.editableTabs;
    40. let activeName = this.editableTabsValue;
    41. if (activeName === targetName) {
    42. tabs.forEach((tab, index) => {
    43. if (tab.name === targetName) {
    44. let nextTab = tabs[index + 1] || tabs[index - 1];
    45. if (nextTab) {
    46. activeName = nextTab.name;
    47. }
    48. }
    49. });
    50. }
    51. this.editableTabsValue = activeName;
    52. this.editableTabs = tabs.filter(tab => tab.name !== targetName);
    53. }
    54. }
    55. }
    56. }
    57. script>

     7.自定义增加标签页触发器

    1. "margin-bottom: 20px;">
    2. <el-button
    3. size="small"
    4. @click="addTab(editableTabsValue)"
    5. >
    6. add tab
    7. el-button>
  • <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
  • <el-tab-pane
  • v-for="(item, index) in editableTabs"
  • :key="item.name"
  • :label="item.title"
  • :name="item.name"
  • >
  • {{item.content}}
  • el-tab-pane>
  • el-tabs>
  • <script>
  • export default {
  • data() {
  • return {
  • editableTabsValue: '2',
  • editableTabs: [{
  • title: 'Tab 1',
  • name: '1',
  • content: 'Tab 1 content'
  • }, {
  • title: 'Tab 2',
  • name: '2',
  • content: 'Tab 2 content'
  • }],
  • tabIndex: 2
  • }
  • },
  • methods: {
  • addTab(targetName) {
  • let newTabName = ++this.tabIndex + '';
  • this.editableTabs.push({
  • title: 'New Tab',
  • name: newTabName,
  • content: 'New Tab content'
  • });
  • this.editableTabsValue = newTabName;
  • },
  • removeTab(targetName) {
  • let tabs = this.editableTabs;
  • let activeName = this.editableTabsValue;
  • if (activeName === targetName) {
  • tabs.forEach((tab, index) => {
  • if (tab.name === targetName) {
  • let nextTab = tabs[index + 1] || tabs[index - 1];
  • if (nextTab) {
  • activeName = nextTab.name;
  • }
  • }
  • });
  • }
  • this.editableTabsValue = activeName;
  • this.editableTabs = tabs.filter(tab => tab.name !== targetName);
  • }
  • }
  • }
  • script>
  •  

  • 相关阅读:
    「PAT乙级真题解析」Basic Level 1107 老鼠爱大米 (问题分析+完整步骤+伪代码描述+提交通过代码)
    什么是Lambda表达式?
    HTTP/HTTPS协议
    【C语言刷LeetCode】1282. 用户分组(M)
    2024得物校招面试真题汇总及其解答(一)
    基于stm32单片机智能温控风扇控制系统Proteus仿真
    多线程_线程状态
    【LeetCode每日一题】【单调栈】2022-10-21 901. 股票价格跨度 Java实现
    计算机二级Office真题解析 excel减免税,订单,成绩
    入门CubeIDE软件 界面功能说明
  • 原文地址:https://blog.csdn.net/W2457307263/article/details/132702968