*ngIf 带有订阅功能的指令
*ngIf directive with subscribe function
我经常 运行 遇到与 *ngIf
合作的“问题”。通常 returns 布尔值的函数内部有一个订阅。由于该指令被多次检查,最终会发出多个请求并且页面崩溃。我真的不知道如何解决它。这是一个例子:
MyService.service.ts:
myFunction(argument: any): Observable<boolean> {
// body that returns the observable using HttpClient
}
MyComponent.component.ts:
constructor(private myService: MyService){}
verifySomething(value: number): boolean {
this.myService.function(value).subscribe((aux) => v); // this is supposed to return what is inside of subscribe to the "upper-function" (verifySomething)
}
MyComponent.component.html:
<tag *ngIf="verifySomething(entity.id)">irrelevant</tag>
我的第一个替代方案是使用“标志”变量来检查输入发生的次数...但我认为这不是最好的方法。
编辑:更详细
MyComponent.component.html:
<div *ngIf="values$ | async as values">
<tbody>
<tr *ngFor="let value of values.content">
<td *ngIf="verifySomething(value.id)"> {{ value.property1 }}
<td *ngIf="verifySomething(value.id)"> {{ value.property2 }}
</tr>
</tbody>
</div>
您可以使用 async
管道解决您的问题。多亏了它,我们可以在模板中使用 async
个变量。
首先,verifySomething
函数必须 return 可观察。
verifySomething(value: number): Observable<boolean> {
return this.myService.function(value);
}
然后,我们需要更新模板文件。它必须使用带有 *ngIf
指令的 async
管道。
<tag *ngIf="verifySomething(entity.id) | async">irrelevant</tag>
我经常 运行 遇到与 *ngIf
合作的“问题”。通常 returns 布尔值的函数内部有一个订阅。由于该指令被多次检查,最终会发出多个请求并且页面崩溃。我真的不知道如何解决它。这是一个例子:
MyService.service.ts:
myFunction(argument: any): Observable<boolean> {
// body that returns the observable using HttpClient
}
MyComponent.component.ts:
constructor(private myService: MyService){}
verifySomething(value: number): boolean {
this.myService.function(value).subscribe((aux) => v); // this is supposed to return what is inside of subscribe to the "upper-function" (verifySomething)
}
MyComponent.component.html:
<tag *ngIf="verifySomething(entity.id)">irrelevant</tag>
我的第一个替代方案是使用“标志”变量来检查输入发生的次数...但我认为这不是最好的方法。
编辑:更详细
MyComponent.component.html:
<div *ngIf="values$ | async as values">
<tbody>
<tr *ngFor="let value of values.content">
<td *ngIf="verifySomething(value.id)"> {{ value.property1 }}
<td *ngIf="verifySomething(value.id)"> {{ value.property2 }}
</tr>
</tbody>
</div>
您可以使用 async
管道解决您的问题。多亏了它,我们可以在模板中使用 async
个变量。
首先,verifySomething
函数必须 return 可观察。
verifySomething(value: number): Observable<boolean> {
return this.myService.function(value);
}
然后,我们需要更新模板文件。它必须使用带有 *ngIf
指令的 async
管道。
<tag *ngIf="verifySomething(entity.id) | async">irrelevant</tag>