![]() |
1
2
在这里,当我使用trackBy时,它解决了这个问题
在ts文件中
注: 案例1:没有routerlinkactive[rla]指令,trackBy工作正常 案例2:rla和trackBy工作正常 案例3:带rla和无trackBy,-->环
如果观察方法调用navItems,则#个方法调用=#个数组中的项。 每次返回数组时,它都会呈现这些值和指令将作用于现有元素,并且这些指令都有挂钩[AfterContentInit,onDestroy],这些挂钩负责添加元素并销毁类。
希望这有帮助!!! 裁判: https://netbasal.com/angular-2-improve-performance-with-trackby-cc147b5104e5 Ref:使用源创建CustomRouterLinkActive以进行调试 https://github.com/angular/angular |
![]() |
2
1
我认为这里的问题是,当您在实例变量中使用数组时,数组总是相同的。我的意思是,每次Angular尝试检测更改时,它都检测到数组是相同的,因此它不会执行进一步的操作。 但是,一旦将实例变量更改为getter,每次调用naviems时都会返回一个新数组。在这种情况下,每次Angular更改检测时,它都会发现一个不同的值。从概念上讲,这些项目是相同的,这并不重要。数组是不同的对象。 我的意思是,在:
但在你改变之后:
为了避免这个问题,您应该使用trackByFunction,如上所述。这样,只有新的/修改的项目才会再次渲染。您也不应该每次都返回一个新数组,只有在数据确实发生了更改时才返回。如果您仍然希望在getter中以友好的方式构造数组,请考虑使用ChangeDetectionStrategy。ON推入组件,然后使用ChangeDetectorRef。markForCheck()表示组件数据已更改,应在更改检测期间对其进行检查。如果不这样做,Angular将永远不会重新启用组件,除非其任何输入属性发生更改。 |
![]() |
Devmix · 如何在new Map()中保存状态? 1 年前 |
![]() |
Luisus · 从Prisma 5客户端提取类型 1 年前 |
|
Rostys · TypeScript:使用类型转换进行类型保护 1 年前 |
![]() |
Anne · 类型不一致的对象的TypeScript类型定义 1 年前 |
|
tuimui · 使用react+ts通过道具传递数据 1 年前 |