【问题标题】:Angular - Conditional click w/ async pipeAngular - 带有异步管道的条件点击
【发布时间】:2020-04-18 20:21:43
【问题描述】:

如果异步变量为真,我正在尝试使元素可点击

    <li (click)='(isThisTrue$ | async) ? openModal() : false'>

我收到此错误。

模板解析错误:解析器错误:动作中不能有管道 表达

你有什么建议?

【问题讨论】:

    标签: angular asynchronous click pipe conditional-statements


    【解决方案1】:

    对 DOM 没有影响:
    我的意思是对 DOM 没有副作用

    <ng-container *ngIf="isThisTrue$ | async as isThisTrue">
     <li (click)='isThisTrue ? openModal() : {}'>
    </ng-container>
    

    【讨论】:

    • 对 DOM 没有影响?此代码在条件为false 时隐藏li 元素。
    • 是的,对 DOM 的影响当然是元素的可见性,但是使用 ng-container 不渲染,可以避免像呃这样的副作用,我的
    • 不在
  • 这对我不起作用,因为如果它是错误的,它会隐藏元素,但感谢您的帮助。我需要它始终可见,但点击能力是有条件的。感谢您的知识。
  • 【解决方案2】:

    对于button 和input 元素,简单的解决方案是将disabled 属性绑定到异步值。在本例中,您可以绑定 pointer-events CSS 属性以使 li 元素无法响应 click 事件:

    <li (click)="openModal()" [style.pointer-events]="(condition$ | async) ? 'auto' : 'none'">
    

    请参阅this stackblitz 以获取演示。

    【讨论】:

    • 谢谢。这是我真正想要的解决方案。我从未使用过 [style.pointer-events]。谢谢你的知识。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签