angular - Angular6:使用 Lodash 的记忆功能会出错
问题描述
预期行为:
我有一个管道,它接受一个对象和一个类型,它返回该对象的一个变量,具体取决于哪种类型。我想记住这个函数,因为它应该总是用相同的参数返回相同的值。管道应返回由多个链接实体组成的字符串。
观察到的行为:
抛出一个错误,说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 对象,它传递实体的类型(例如用户)和一个 via(这是可选的,它用于在数据表中显示其他内容,而不是默认链接实体。例如:用户数据表并显示链接权限而不是角色)。然后它只根据类型返回 linkCount 对象的正确变量。
解决方案
我认为您在this
这里遇到了问题,并且memoize
在默认情况下仅使用第一个参数来形成map cache key
.
this
问题在于默认情况下momoize
是使用memoized 函数的 this 绑定调用的。
默认情况下,提供给 memoized 函数的第一个参数用作地图缓存键。func 是通过 memoized 函数的 this 绑定调用的。
推荐阅读
- swift - Vapor 如何通过电子邮件查找用户
- griddb - 尝试安装 Griddb 数据库时出现错误
- c# - 当 ContentPage 具有 SizeChanged 事件侦听器时,Xamarin.Forms Java.Lang.NullPointerException
- discord - 仅允许特定频道中的链接
- c++ - 从 `const char *` 隐式构造 `const std::string` 有效吗?
- c# - SSIS脚本C#脚本任务使用变量将当前日期添加到文件中
- python-3.x - 根据 odoo 中的拣货类型,在继承的交货/收据 qweb 报告上打印产品描述
- python - 根据 Pandas 中另一列值的条件更改一列中的值
- postgresql - TypeORM / Postgres - 包括至少一个满足要求的所有关系
- python - 使用带有 from_object() 的 Flask 配置类进行开发/生产/测试环境选择的正确方法?