mat-card-avatar 在初始页面加载时未正确渲染

Ric*_*ahl 4 material-design angular-material angular

我有一个简单的垫卡头像布局,它在我的应用程序的许多页面的标题中显示圆形图标。我发现在许多页面上(但不是所有页面,即使使用相同类型的代码)都没有mat-card-avatar在初始渲染通道上正确渲染。

我正在使用这段代码:

<h1 fxLayout="row">
      <div mat-card-avatar class="header-icon">
        <mat-icon>home</mat-icon>
      </div>
      Welcome {{ user.userName }}
</h1>
Run Code Online (Sandbox Code Playgroud)

第一次渲染时(即完全刷新浏览器),预期的圆形图标显示为方形:

在此输入图像描述

如果我然后导航到具有相同布局样式的另一个视图,则可以mat-card-avatar正确呈现,就像然后导航回原始视图一样:

在此输入图像描述

真正奇怪的是,我在很多页面上使用相同的基本布局,在某些页面上如所描述的那样失败,而在其他页面上则有效。大多数其他有效的方法往往更加复杂。

我怀疑这是一个计时问题,但我查看了代码并尝试了移动包含,但没有任何效果。也许与这种情况相反的是,图标显示的原色也来自样式 - 因此肯定会应用一些材质样式。

在调试器中查看渲染的 HTML,我发现渲染的 HTML 没有任何区别 - 相同的 HTML 标记、类和样式,无论以哪种方式渲染,这确实很奇怪。

有没有人遇到过这个问题,或者对可能导致这个问题的原因以及任何解决方法有任何建议?

Ric*_*ahl 6

<mat-card>看起来问题是实际组件中缺少元素。这就是为什么有些页面没有显示该行为,而其他页面却显示了该行为。

如果我将上面的代码包装到一个<mat-card>块中,它就可以工作。但只要<mat-card>页面上有一个空白就可以完成这项工作。

这很丑陋,但它有效:

<mat-card style="display: none"></mat-card>
<h1 fxLayout="row">
  <div mat-card-avatar class="header-icon">
    <mat-icon>home</mat-icon>
  </div>
  Welcome {{ user.userName }}
</h1>
Run Code Online (Sandbox Code Playgroud)

您还可以添加以下内容:

<mat-card style="display: none"></mat-card>
Run Code Online (Sandbox Code Playgroud)

到根组件,这将为树中下面的所有组件解决这个问题。

所有这些都很丑陋,而且可能不是设计的行为,所以最好不要mat-card-avatar在 a 之外使用mat-card,但在紧要关头这会起作用。