我构建了一个名为"gw-response-tabs"的组件,该组件具有带有变量(navLinks(的输入,该变量是我想要显示的选项卡数组。当我像这样从 html 传递输入数据时:
<gw-responsive-tabs
[navLinks]="[{ label: 'PENDING', path: '/mentoring/manage/pending' },
{ label: 'CURRENT', path: '/mentoring/manage/pending' }]">
</gw-responsive-tabs>
然后一切都按预期工作,我可以看到 2 个选项卡。
如果我更改它并使用 getter 或函数发送相同的数据,那么 gw 响应选项卡组件的 ngOnChanges 会以非常高的频率不间断地触发,从那时起,chrome 没有响应。
get mentoringTabs(): Array<any> {
return [{ label: 'PENDING', path: '/mentoring/manage/pending' }, { label: 'CURRENT', path: '/mentoring/manage/pending' }];
}
和 html:
<gw-responsive-tabs [navLinks]="mentoringTabs"></gw-responsive-tabs>
有什么想法会导致这种现象吗?
这是因为更改检测默认策略,它每秒左右都会检查一次 无论返回对象的值是否更改,它都会重新呈现模板,因此每次重新渲染 html 时,它都会调用 get 方法,该方法每次调用时都会返回一个新对象,当 ngOnChanges 将其作为值作为新对象进行比较时,它现在在圈。
这是更改检测工作原理的链接 https://angular-2-training-book.rangle.io/handout/change-detection/angular_1_vs_angular_2.html