【问题标题】:*ngIf is adding elements instead of replaceing them*ngIf 是添加元素而不是替换它们
【发布时间】:2018-10-24 10:33:53
【问题描述】:

我的代码

<i *ngIf="!isFollowing" class="far fa-bell"></i>
<i *ngIf="isFollowing" class="fas fa-bell"></i>

isFollowing 的类型是布尔型

每当我将其更改为 true 或 false 时,它​​都会根据表达式显示新元素,但它不会删除前一个元素,而是将新元素添加到 DOM。 结果,多个图标就像在图像中一样可见。

Multiple Icons being Added

我相信更改检测正在检测更改并添加新的 DOM 元素,但它不会更新以前的 DOM 元素。

【问题讨论】:

  • &lt;i [class]="'fa-bell fa' + (isFollowing ? 's' : 'r')"&gt;&lt;/i&gt;

标签: angular angular6 angular-ng-if


【解决方案1】:

试试这个

<i [ngClass]="{'far': !isFollowing, 'fas': isFollowing}"  class="fa-bell"> <i>

【讨论】:

  • 我会接受这个答案,因为这应该有效,但它没有。即使布尔值发生变化,图标也保持不变。我相信问题出在破坏页面的其他东西上,因此是更改检测的问题。
【解决方案2】:

试试

<i *ngIf="!isFollowing; else follow" class="far fa-bell"></i>
<ng-template #follow><i class="fas fa-bell"></i></ng-template>

【讨论】:

  • 这应该和 OPs 代码做的一样。
  • 如果问题出在更改检测和 *ngIf 之一表现不佳,不。 ng-template 依赖于第一个 *ngIf 的条件:代码从两个条件变为一个。
  • 问题在于更改检测而不是两个ngIf 指令,因此您的代码仍然没有解决问题,只是隐藏了它。你是什​​么意思ngIf 是“表现不佳”?这不会发生。
  • 我没有说它发生了,OP 说第一个 DOM 元素没有被删除。我非常怀疑它,我只是在这件事上给了我两分钱(并赞成ngClass 的答案,因为我觉得它更合适)。
  • 没有真正的帮助。做了与 *ngIf 相同的事情,即添加到 DOM 但不删除前一个。我相信这个问题比语法更根深蒂固。
【解决方案3】:

您为什么不使用ngClass 这样做?

<i [ngClass]="{'fas fa-bell': isFollowing == true, 'far fa-bell': isFollowing == false}"></i>

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多