javascript - 带有 ngIf 闪烁的 Angular2 项目

标签 javascript angular

背景

我正在创建一个信用卡表单组件。该组件检查输入的信用卡类型,并显示该卡类型的符号/图标。该符号是一个外部 SVG,会在识别出信用卡类型后立即加载。

问题

cc 符号闪烁,如下图所示。在 Chrome DOM 检查器中,我看到应用了 *ngIf 的元素正在发生某些事情,该元素正在以某种方式更新(没有任何属性更改),这似乎导致闪烁.

Angular2 ngIf flickering

代码

下面是我的模板中包含闪烁部分的代码。我已经检查了组件,ngIf 中使用的变量没有更新,除非它应该更新(当信用卡号更改为不同类型时)。

<div class="credit-card-icon" *ngIf="creditCardType != null">
    <object type="image/svg+xml" [data]="getTypeIconUrl()"></object>
</div>

是什么导致了这个问题,我该如何解决?

更新

事实证明,这实际上是由 [data] 属性引起的,而不是与 ngIf 有任何关系。抱歉责怪你,ngIf。

最佳答案

写完这篇文章后,我开始思考为什么它会一直尝试更新 DOM 元素 object。事实证明,解决方案非常明显。由于问题没有发生在静态 data 属性上,而只出现在动态绑定(bind)的 [data] 属性上,我猜它与对象相等性有关.

在我的组件中,我使用 DomSanitizerbypassSecurityTrustResourceUrl(url) 方法来“批准”图标的 url。

然而,下面的陈述总是错误的:

bypassSecurityTrustResourceUrl(url) == bypassSecurityTrustResourceUrl(url)

通过缓存从 bypassSecurityTrustResourceUrl(url) 返回的 SafeResourceUrl,此问题已解决!

关于javascript - 带有 ngIf 闪烁的 Angular2 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059829/

相关文章:

javascript - 检查特定属性/检查 puppeteer 中元素的陈旧性?

javascript - rxjs-tslint 与 rxjs-tslint-rules 包

angular - (任何窗口).global = window;

node.js - nodejs 环境变量 "NODE_EXTRA_CA_CERTS"

javascript - Jquery 和 Javascript 中数组的区别

javascript - PHP 站点结构技术与 CSS/Javascripting 包括

javascript - 在表单输入中指定逗号后的最大长度

javascript - 如何在 typescript 中编写子类(React.Component)的类型定义?

javascript - 如何使用 Angular 4/Angular 5 使用不同的参数并行多次发布相同的 URL?

angular - 来自 observable : testing with Jasmine marbles 的特殊结果