我在*ngFor
个对象上使用了array
指令,它有很多属性。
我希望仅在更改其中三个属性时更新此*ngFor
,但根据TrackByFunction上的documentation,没有一个有效的示例来说明如何实现。{ / p>
我试图返回一个包含属性的对象,但它似乎不起作用,因为当任何其他属性发生更改时,模板仍会再次呈现。
答案 0 :(得分:1)
我知道这很旧,但是我认为的问题是您如何处理对跟踪比较器的响应。在您的示例中,您答复了另一个对象,该对象与另一个对象相比总是返回不同的值。
因此,每次创建对象{a: "ehhhh", b:"bee", c:"cee"}
时,因为它具有有限的属性集,因此即使属性值相同它们不是同一对象,也要将其与另一个对象进行比较。
如果返回了JSON.stringify(trackedObj)
,则比较的两个字符串可能会返回正确触发更改检测所需的布尔值。但是在那一点上,我想知道字符串转换相对于标准有什么改进,只是它可以将未更改的项目从dom中删除。.有趣的主意...
另一SO中的更多细节:https://stackoverflow.com/a/1144249/1251604
答案 1 :(得分:0)
尝试将[ngForTrackBy] =“trackSelectionsBy”添加到元素中,trackSelectionsBy方法应如下所示:
public trackSelectionsBy(index: number, myObject: MyObject): any {
return myObject.id + myObject.count + myObject.startTime;
}
添加您自己的属性以跟踪。
答案 2 :(得分:0)
我有一个非常类似的情况,一个非常大的数组,无法添加分页,找不到任何解决方案使用trackByFn
的多个属性,我有三个属性和四个不同的情况,他们可以改变。我使用名为uniquefier
(UUID)的对象中的附加属性解决了这个特殊问题,然后当三个属性或四个不同场景中的任何一个出现时,我使用新的UUID进行更新。然后我将此属性添加到我的trackByFn
。希望这会有所帮助。