为什么我的Angular2模板的一小部分即使没有更改也会继续重新渲染?

为什么我的Angular2模板的一小部分即使没有更改也会继续重新渲染?,angular,Angular,我有一个Angular2组件,它根据来自无头CMS的数据呈现页面片段。特别是,该组件使用如下模板呈现页脚: <div class="footer"> <div class="row"> <div class="col s12 m6" *ngFor="let column of footer"> <div [innerHtml]="sanitizer.bypassSecurityTrustHtml(colu

我有一个Angular2组件,它根据来自无头CMS的数据呈现页面片段。特别是,该组件使用如下模板呈现页脚:

<div class="footer">
    <div class="row">
        <div class="col s12 m6" *ngFor="let column of footer">
             <div [innerHtml]="sanitizer.bypassSecurityTrustHtml(column)"></div>
        </div>
    </div>
</div>

其中,
this.footer
是一个包含HTML字符串数组的私有变量
此.footer
ngOnInit()
中设置。整个模板比这个大得多

我的问题是,模板的这个特定片段每1-2秒就会重新渲染一次。这使得无法选择在页脚中找到的联系人详细信息,因为选定的HTML节点将被新的(相同的)节点替换,因此选择将被重置

页面的其余部分以类似的方式呈现,但它没有显示此问题。如果我查看Chrome调试器中的元素,我可以看到这个特定片段的
s
在被替换时闪烁

我正在记录
ngOnInit()
ngOnChanges()
,但在重新渲染期间,它们不会运行


我不知道是什么导致了这种情况。

如果您绑定到视图中的函数,那么每次运行更改检测时都会调用它们

如果
sanitizer.bypassSecurityTrustHtml(列)
为每个调用返回不同的对象实例,Angular将再次呈现
[innerHTML]
部分,因为它将其识别为更改


更喜欢将函数结果指定给组件中的属性,并将此属性绑定到视图。

Mmm。。。。这是一个很好的小陷阱。显然,即使参数相同,函数结果也是不同的实例。通常情况就是这样,除非结果被缓存并且函数返回缓存结果。但是在这种情况下,您可以只绑定到缓存,只在参数更改时调用函数。