elementui el-tab添加badge,以及实时更新标记值

本文详细介绍了一个使用Vue.js框架的示例项目,通过父组件与子组件之间的数据通讯,实现了选项卡页面的动态切换及数据实时更新。文章探讨了如何在不同组件间传递参数,以及如何在组件内部通过监听事件来更新状态。

父页面

<template>
  <div>
    <el-tabs v-model="activeName" @tab-click="handleClick">
      <el-tab-pane name="aaa">
        <span slot="label">
          页面一<el-badge :value="val1"></el-badge>
        </span>
      </el-tab-pane>
      <el-tab-pane name="bbb">
        <span slot="label">
          页面二<el-badge :value="val2"></el-badge>
        </span>
      </el-tab-pane>
    </el-tabs>
    <component-one v-show="child1" @numLength1="getLength($event, 1)"></component-one>
    <component-two v-show="child2" @numLength2="getLength($event, 2)"></component-one>
  </div>
</template>
<script>
  import component-one from 'xxx'
  import component-two from 'yyy'
  export default{
    components: {
      component-one,
      component-two
    },
    data() {
      return {
        activeName: 'aaa',
        child1: true,
        child2: false,
        num1: 0,
        num2: 0
      }
    },
    methods: {
      handleClick(tab) {
        if(tab.name === 'aaa') {
          this.child1 = true
          this.child2 = false
        } else if(tab.name === 'bbb') {
          this.child1 = false
          this.child2 = true
        }
      },
      getLength(val, key) {
        
        if(key === 1) {
          this.num1 = val
        } else if(key === 2) {
          this.num2 = val
        }
        // 实现标记实时更新
        this.$children[0].$children[0].$forceUpdate()
      }
    }
  }
</script>

子页面一

this.$emit('numLength1', this.List.length)

子页面二

this.$emit('numLength2', this.List.length)
### 如何自定义 Element UI `el-badge` 组件的样式 为了更好地控制 `el-badge` 的外观,可以通过多种方式来自定义其样式。以下是几种常见的方法: #### 方法一:使用内联样式或类名覆盖默认样式 可以直接给 `el-badge` 或者嵌套的内容添加特定的 CSS 类来修改显示效果。 ```html <template> <div> <!-- 使用自定义类 --> <el-badge :value="12" class="custom-badge"> <el-button type="primary">消息</el-button> </el-badge> <!-- 直接应用内联样式 --> <el-badge :value="3" style="font-size: 18px; color:red;"> <el-button type="warning">警告</el-button> </el-badge> </div> </template> <style scoped> .custom-badge .el-badge__content { background-color: blue; font-size: 14px; } </style> ``` 这种方法简单直观,适合于简单的样式调整[^1]。 #### 方法二:利用深度作用选择器(Deep Selector) 当需要更深入地定制内部结构时,可以借助 `/deep/` 或 `::v-deep` 来穿透scoped样式的作用域边界。 ```css /* 对应 Vue CLI 版本不同 */ /deep/.el-badge__content.is-fixed { /* 或 ::v-deep */ top: 5px !important; right: 10px !important; } .el-badge__content.is-dot { width: auto; height: auto; padding: 0 6px; border-radius: 12px; } ``` 这种方式适用于那些想要改变 badge 默认位置或者其他深层次样式的场景。 #### 方法三:通过 JavaScript 动态设置样式 如果希望基于某些条件动态更改徽章的颜色或其他属性,则可以在 mounted 钩子函数里操作 DOM 节点或者绑定 inline-style 属性。 ```javascript mounted () { this.$nextTick(() => { const badges = document.querySelectorAll('.el-badge__content') Array.from(badges).forEach((badge, index) => { if (index % 2 === 0) { badge.style.backgroundColor = 'green' } else { badge.style.color = '#fff'; badge.style.borderColor = 'orange'; } }) }) }, // 或者直接在模板中使用 bind 指令 <el-badge :value="count" :style="{ backgroundColor: count > 10 ? 'red' : ''}"> ... </el-badge> ``` 这种灵活性较高的方案允许开发者根据业务逻辑灵活设定不同的视觉反馈。 #### 方法四:创建新的主题变量并重写 LESS 文件 对于追求一致性的大型项目来说,最推荐的做法是从源码层面入手,即编辑 Element Plus 提供的主题配置文件 `_variables.less` ,从而达到统一管理的目的。 假设要新增一个名为 `$badge-primary-bg` 的颜色变量用于表示主要背景色,在项目的根目录下找到 node_modules/@element-plus/theme-chalk/src/badge.scss 并适当修改相关内容即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值