angular - 从角度模板多次调用方法
问题描述
我在模板中使用方法来调用返回boolean
值的函数。问题是该函数被调用超过 6 次。之后,我使用changeDetectionStrategy.onPush
了将呼叫减少到 2 次。下面是我的代码
HTML
<div *ngIf="(checkboolObs(check$)) | async"></div>
TS
check$: Observable<service> = this.data.getresponse();
ngOnInit() {
this.checkboolObs();
}
checkboolObs(style):boolean {
return somestyleIDS.includes(style.component)
}
如果找到该值,它会返回true
,但它被多次调用,我只需要调用一次。这背后的原因是因为checkboolobs()
在导航时有时不会触发,这就是我从模板调用此方法的原因。
解决方案
这是正常的,因为每次调用更改检测周期时,它都会评估模板并且您的函数是其中的一部分,因此将重新评估该函数(再次调用)。
Angular 中变更检测如何工作的简要说明
想象一下,每次发生事件时,可能会导致任何变化(例如点击、某些时间间隔正在做某事、ajax 调用) HTML)。
当您使用该onPush
策略时,您基本上是在告诉 Angular 停止侦听任何提到的更改,因为您将负责在发生更改时告诉框架。** 免责声明我们有| async
可以在模板中使用的,它将与onPush
策略一起正常工作,如果您的输入通过引用更改检测将被触发,但正如我所说,这是一个简短的解释。
所以你可以做的事情是(我假设你从check$
可观察到的 ids)
myCheck$ = this.check$.pipe(map(arrayOfIds => arrayOfIds.includes(style.component)))
然后myCheck$
在您的模板中使用|async
.
如果这不起作用,请更详细地解释您的用例。
推荐阅读
- vba - 第二个文档上的 Word VBA 运行时错误 5460。在全局模板中添加
- javascript - 单击轮播按钮时如何将间隔设置为始终持续 Xs(香草 JavaScript)
- sql - SQL 聚合查询和求和列
- javascript - 如何在 javascript 文档中指定返回的对象格式
- mysql - 重命名后自动递增的字段没有默认值
- .net - 为什么我无法使用 Terraform 顺利创建 Azure VM
- algorithm - 将二进制数组分成三部分,使每一部分代表相同的十进制
- c# - 将 JSON 数据解析为 C# 对象
- wordpress - 如何在 woocommerce 的 REST API 中获得畅销和最喜欢的产品?
- javascript - 如何将具有 YYYY-DD-MM HH:MM:SS 格式的对象字段的 JSON 文件转换为列表列表?