Angular 从角度模板多次调用方法
我使用模板中的方法调用函数,该函数返回Angular 从角度模板多次调用方法,angular,typescript,rxjs,angular9,rxjs-observables,Angular,Typescript,Rxjs,Angular9,Rxjs Observables,我使用模板中的方法调用函数,该函数返回布尔值。问题是函数被调用了6次以上。之后,我使用了changeDetectionStrategy.onPush,将调用次数减少到2倍。下面是我的代码 HTML <div *ngIf="(checkboolObs(check$)) | async"></div> TS check$: Observable<service> = this.data.getresponse(); ngOnInit()
布尔值。问题是函数被调用了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)
}
check$:Observable=this.data.getresponse();
恩戈尼尼特(){
this.checkboolObs();
}
checkboolObs(样式):布尔值{
返回someStyleId.includes(style.component)
}
如果找到该值,它将返回true
,但它会被调用多次,我只需要调用一次。这背后的原因是导航时有几次不会触发checkboolobs()
,这就是我从模板调用此方法的原因。这是正常的,因为每次调用更改检测循环时,它都会评估模板,并且您的函数是模板的一部分,因此该函数将被重新评估(再次调用)
简要说明角度变化检测是如何工作的
假设每次有可能导致任何更改的事件(例如单击、某些时间间隔正在做某事、ajax调用)Angular都会立即获取模板并为您重新计算它(换句话说,更新HTML)
当您使用onPush
策略时,您基本上是在告诉angular停止监听所提到的任何更改,因为您将负责在发生更改时告诉框架。
**免责声明我们有可以在模板中使用的| async
,它可以与onPush
策略配合使用,如果您的输入按引用更改,将触发更改检测,但正如我所说,这是一个简要的解释
因此,您可以做的事情是(我假设您是从检查$
observable中获取ID)
然后在模板中使用myCheck$
和|async
如果这不起作用,请更详细地解释您的用例。我看不到可观察的检查$
与代码其余部分有任何联系<代码>checkboolObs
不是一个observable@MoxxiManagarm请立即检查,您仍然使用checkBoolObs
上的异步管道,该管道返回布尔值,而不是可观察值。我不明白这里是怎么涉及到检查$
的。另外,这篇文章可能会对你有所帮助
myCheck$ = this.check$.pipe(map(arrayOfIds => arrayOfIds.includes(style.component)))