如何使用异步管道值处理`ngIf`?

Posted

技术标签:

【中文标题】如何使用异步管道值处理`ngIf`?【英文标题】:How to handle `ngIf` with async pipe values? 【发布时间】:2019-11-25 05:45:23 【问题描述】:

我正在尝试使用async 管道来实现ngIf。但不起作用。有人帮我吗?

这是我的html

<div class="response-container">
    xx response | async | json 
    <div class="failed-error" *ngIf="(response.responseFail | async )">
        response.message
    </div>
    <div class="success-msg" *ngIf="(response.responseSucc | async) === 'true' ">
        response.message
    </div>
</div>

在上面的xx response | async | json 中打印为:

xx "responseFail": false, "responseSucc": true, "message": "success"

但为什么这不适用于*ngIf 条件?

【问题讨论】:

控制台中是否显示任何错误? 您需要将绑定值绑定到异步,因此在评估该值时它将返回真或假,例如。 response | async as _response 但我会将其添加到响应容器中,然后在您的失败错误中我会像这样检查*ngIf="_response.responseFail 而不是您 asnyc。 @JohnKane 是的,没有错误。 【参考方案1】:

response 是一个数据源,而 response.responseFail 不是一个。试试这个:

*ngIf="(response | async )?.responseFail"

*ngIf="(response | async)?.responseSucc  === 'true' "

【讨论】:

【参考方案2】:

你必须在异步管道之后访问对象 =>

*ngIf="(response | async )?.responseFail"

ex =>

https://stackblitz.com/edit/angular-tvmqzm

编辑:ethan 最先到达这里。

【讨论】:

【参考方案3】:

除了前面的答案,你不应该在同一个 observable 上多次使用异步管道。

最好这样做: (最好用 $ 命名 observabkes)

<div *ngIf="response$ | async as response" class="response-container">
    xx response | json 
    <div class="failed-error" *ngIf="response.responseFail">
        response.message
    </div>
    <div class="success-msg" *ngIf="response.responseSucc">
        response.message
    </div>
</div>

由于这些 div 仅在类上有所不同,您应该考虑使用 ng-class

【讨论】:

以上是关于如何使用异步管道值处理`ngIf`?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular 6中将异步管道的结果分配给没有*ngIf的变量

嵌套在 ngIf 中时,异步管道订阅无法正常工作

角度-知道模板渲染何时完成-使用异步管道

Ionic 4 Angular模板与异步管道绑定到可观察

将两个异步订阅放在一个 Angular *ngIf 语句中

错误:找不到管道“异步”! AOT & IVY 更新后