【问题标题】:Angular Material - Empty Badge角材料 - 空徽章
【发布时间】:2023-03-05 19:28:01
【问题描述】:

我目前正在向我的应用程序菜单的按钮添加徽章,这已经可以正常工作了。我想显示用户仍然需要查看的通知数量,如下所示:

<span matBadge="4" matBadgeColor="warn">Look at these notifications!</span>

但在手机上,菜单隐藏在汉堡图标后面。我不希望用户在这个图标上显示他有多少通知。我只是想让他知道他有一些,当他打开菜单时,他会在各个按钮上看到一个带有通知数量的徽章。

我的问题是总是隐藏一个空的徽章。我似乎无法像这样显示它:

<span matBadge="" matBadgeColor="warn">Look at these notifications!</span>

就不能显示一个空的徽章吗?我错过了什么,还是这种行为是设计使然?

【问题讨论】:

    标签: angular angular-material badge


    【解决方案1】:

    使用[matBadgeHidden] = "true" 动态控制matBadge 的可见性, 例如:

    <span [matBadgeHidden] = "commentCount == 0"  [matBadge]="commentCount" matBadgeColor="warn" matBadgeOverlap="false">Comments</span>
    

    【讨论】:

    • -1 因为这与所问的问题无关。问题是能够显式显示带有空内容的徽章。如果内容为空,即matBadge 的值为空,Badge 组件默认隐藏徽章,无论matBadgeHidden 的值如何。
    • matbadgehidden 也出现在文档中,不知道为什么,但该指令在某些情况下没有隐藏徽章,如果其他人面临同样的问题,请告诉我
    • 我也是@AwaisNasir - 你是怎么相处的?
    【解决方案2】:

    您可以在下面添加 css 以显示空徽章。

    .mat-badge-hidden .mat-badge-content:empty {
      display: inline-block;
    }
    

    看看下面的例子。

    https://stackblitz.com/edit/angular-mat-badge-with-pipe

    【讨论】:

    • 在 Angular 9 中仍然有效 - 只需确保将 null 而不是空字符串传递给 [matBadge]
    【解决方案3】:

    您必须为自己添加一个类来隐藏文本。 mat-badge 没有隐藏内容的功能。空格或&amp;nbsp; 不起作用:

    .mat-badge.hide-text .mat-badge-content {
      color: transparent;
    }
    
    <span matBadge="0" matBadgeColor="warn" class="hide-text">Look at these notifications!</span>
    

    更新:

    如果你真的不想使用某个类,可以使用&amp;#8288;。这是一个所谓的WORD JOINER。里程可能因 Angular 版本而异 :),但这将打印一个空徽章

    <span matBadge="&#8288;" matBadgeColor="warn">Look at these notifications!</span>
    

    【讨论】:

    • 你们认为有一个原因,为什么默认情况下不能显示一个空的徽章?如果我认为我需要一个,我的设计会不会有错误?
    • 您不想显示通知数量的原因是什么。这对我来说有点不清楚,但如果你确定这是你想要展示它的方式..那么..这就是要走的路:)
    • 让我们以 Facebook 为例,想象一下我将好友、消息和通知按钮分组在一个汉堡菜单下。然后我想向用户展示发生了什么事并显示徽章。显示 10 内部(如 3 个好友请求、2 条消息和 5 个新帖子)将没有任何用处,因为用户无论如何都无法解释该数字,直到他打开菜单。但表明发生了什么事情仍然很重要。
    • 这是有道理的,对我来说,一个空的徽章就是足够的信息。我不知道你有多个徽章。我相信空的徽章被用在几个流行的设计中
    • 对我来说,当您考虑将它与绑定一起使用时,这将是有意义的。如果你有例如[matBadge]="variable",如果您在代码中的某处设置variable = "",您可以轻松关闭徽章。
    【解决方案4】:

    在查看source for the badge component 时,由于线条的原因,看起来这是设计使然:

    '[class.mat-badge-hidden]': 'hidden || !_hasContent',
    ...
    this._hasContent = value != null && `${value}`.trim().length > 0;
    

    看起来您可以使用matBadge="&amp;#8203;" 来显示一个空的徽章来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2019-02-19
      • 2023-03-10
      • 2015-10-09
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      相关资源
      最近更新 更多