* ng为trackBy多个属性

时间:2017-12-02 09:33:58

标签: angular

我在*ngFor个对象上使用了array指令,它有很多属性。

我希望仅在更改其中三个属性时更新此*ngFor,但根据TrackByFunction上的documentation,没有一个有效的示例来说明如何实现。{ / p>

我试图返回一个包含属性的对象,但它似乎不起作用,因为当任何其他属性发生更改时,模板仍会再次呈现。

3 个答案:

答案 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。希望这会有所帮助。