Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ngOnChanges不间断地激发并使应用程序不重新启动_Angular_Ngonchanges_Lifecycle Hook - Fatal编程技术网

Angular ngOnChanges不间断地激发并使应用程序不重新启动

Angular ngOnChanges不间断地激发并使应用程序不重新启动,angular,ngonchanges,lifecycle-hook,Angular,Ngonchanges,Lifecycle Hook,我构建了一个名为“gw responsive tabs”的组件,该组件有一个带有变量(NavLink)的输入,该变量是我要显示的选项卡数组。当我从html中传递输入数据时,如下所示: <gw-responsive-tabs [navLinks]="[{ label: 'PENDING', path: '/mentoring/manage/pending' }, { label: 'CURRENT', path: '/mentoring/manage/pending' }]">

我构建了一个名为“gw responsive tabs”的组件,该组件有一个带有变量(NavLink)的输入,该变量是我要显示的选项卡数组。当我从html中传递输入数据时,如下所示:

<gw-responsive-tabs
  [navLinks]="[{ label: 'PENDING', path: '/mentoring/manage/pending' },
  { label: 'CURRENT', path: '/mentoring/manage/pending' }]">
</gw-responsive-tabs>

然后一切正常,我可以看到2个标签

如果我更改它并使用getter或函数发送相同的数据,那么gw responsive tabs组件的ngOnChanges会以非常高的频率不间断地触发,并且从那时起chrome没有响应

get mentoringTabs(): Array<any> {
  return [{ label: 'PENDING', path: '/mentoring/manage/pending' }, { label: 'CURRENT', path: '/mentoring/manage/pending' }];
}
get-mentoningtabs():数组{
返回[{label:'PENDING',path:'/mentering/manage/PENDING'},{label:'CURRENT',path:'/mentering/manage/PENDING'}];
}
以及html:

<gw-responsive-tabs [navLinks]="mentoringTabs"></gw-responsive-tabs>


你知道什么会导致这种现象吗?

这是因为更改检测默认策略,它每隔一秒左右就会检查一次,无论返回对象的值是否更改,它都会重新呈现模板,因此每次重新呈现html时,它都会调用返回新对象的get方法每次调用它时,当ngOnChanges将其作为一个新对象进行比较时,它就会在循环中运行

以下是更改检测工作原理的链接

在每个更改检测周期中都必须调用getter,由于您每次都返回一个新对象,Angular会将其视为已更改的数据并在更改时激发。您如何知道这是应用程序失败的原因?我将changeDetection策略更改为onPush,但仍然没有成功。除此之外-无论您是使用函数还是HTML中的硬编码数据发送数据,都会发生更改检测。您能否为gw响应选项卡添加HTML,因为我尝试了您尝试的操作,但它只抛出两次ngChange,这是它应该做的