预期行为:
我有一个接受对象和类型的管道,并根据该类型返回该对象的变量。我想记住此函数,因为它应始终返回具有相同参数的相同值。管道应返回包含多个链接实体的字符串。
观察到的行为:
抛出错误,说this.getDefaultEntityTypeForLinkedEntities is not a function
。我在得到记忆的方法中使用了这种方法。
代码:
export class LinkCountPipe implements PipeTransform {
public transform(linkCount: LinkCount, type: EntityType, via: EntityType): string {
const memoGetLinkCount = _.memoize(this.getLinkCount);
const result = memoGetLinkCount(linkCount, type, via);
return result ? result.toString() : undefined;
}
public getLinkCount(linkCount: LinkCount, type: EntityType, via: EntityType): number {
const someType = via ? via : this.getDefaultEntityTypeForLinkedEntities(type);
switch (someType) {
case EntityType.APPLICATION:
return linkCount.nbApplications;
case EntityType.ENTITLEMENT:
return linkCount.nbEntitlements;
case EntityType.PERMISSION:
return linkCount.nbPermissions;
case EntityType.ROLE:
return linkCount.nbRoles;
case EntityType.USER:
return linkCount.nbUsers;
}
}
public getDefaultEntityTypeForLinkedEntities(type: EntityType) {
return DatatableSettings.getDefaultEntityTypeForLinkedEntities(type);
}
}
说明:
我在应用程序中使用实体。每个实体都链接到其他类型的实体(我有用户,角色,权限等)。每个实体对象都包含一个从服务器获取的linkCount对象,例如,它包含一个用户的链接角色,权利和应用程序。在我的HTML中,我使用:element.linkCount | linkcount: type : via
。链接计数纯管道用于更好的性能。它应该做的是:接受实体的linkCount对象,传递实体的类型(例如,用户)和通孔(这是可选的,它用于在数据表中显示除默认的链接实体(例如:用户数据表,并显示链接权限而不是角色)。然后,根据类型,它仅返回linkCount对象的正确变量。
答案 0 :(得分:0)
我认为您在这里有一个this
问题,以及memoize
的概念问题,因为当它仅使用第一个参数时,您将3个参数传递给它默认形成map cache key
。
this
问题来自于以下事实:默认情况下,momoize
是通过记忆功能的此绑定调用的。
See the _.memoize documentation
默认情况下,提供给记忆功能的第一个参数是 用作地图缓存键。使用this绑定调用func 记忆功能的功能。