首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >*具有订阅功能的ngIf指令

*具有订阅功能的ngIf指令
EN

Stack Overflow用户
提问于 2021-06-07 05:42:58
回答 1查看 825关注 0票数 0

我经常遇到一个使用*ngIf的“问题”。通常返回布尔值的函数在其中有一个订阅。当对指令进行多次检查时,最终会发出多个请求并导致页面崩溃。我真的不知道怎么解决它。下面是一个例子:

MyService.service.ts:

代码语言:javascript
运行
AI代码解释
复制
myFunction(argument: any): Observable<boolean> {
   // body that returns the observable using HttpClient

}

MyComponent.component.ts:

代码语言:javascript
运行
AI代码解释
复制
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:

代码语言:javascript
运行
AI代码解释
复制
<tag *ngIf="verifySomething(entity.id)">irrelevant</tag>

我的第一个选择是使用一个“标志”变量来解决这个问题,该变量检查输入occurred...but的次数,我认为这不是最好的方法。

编辑:更详细的

MyComponent.component.html:

代码语言:javascript
运行
AI代码解释
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-07 05:47:14

您可以使用async管道解决问题。多亏了它,我们可以在模板中使用async变量。

首先,verifySomething函数必须返回可观测值。

代码语言:javascript
运行
AI代码解释
复制
verifySomething(value: number): Observable<boolean> {

  return this.myService.function(value);
}

然后,我们需要更新模板文件。它必须使用带有async指令的*ngIf管道。

代码语言:javascript
运行
AI代码解释
复制
<tag *ngIf="verifySomething(entity.id) | async">irrelevant</tag>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67872815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档