【问题标题】:Angular: Correct syntax for NgIf using async pipe with multiple template variables?Angular:使用带有多个模板变量的异步管道的 NgIf 的正确语法?
【发布时间】:2019-08-21 13:27:01
【问题描述】:

使用 Angular,我们可以订阅 Observable 并将异步管道的结果分配给另一个变量:

    *ngIf="(data$ | async) as data; else loading"

我们可以检查多个条件:

    *ngIf="(data1$ | async) && (data2$ | async); else loading"

但是使用 Angular “as”关键字验证多个条件的正确语法是什么?

我试过了:

    *ngIf="((data1$ | async) as data1) && ((data2$ | async) as data2); else loading"

但我有一个问题:

Parser Error: Unexpected token &&, expected identifier, keyword, or string

【问题讨论】:

    标签: angular


    【解决方案1】:

    您可以使用 object-like 语法。

    <ng-container *ngIf="{
      data1: data1$ | async,
      data2: data2$ | async
    } as data">
      <div *ngIf="data.data1 && data.data2; else loading"> 
        <span>{{ data.data1 }}</span>
        <span>{{ data.data2 }}</span>
      </div>
    </ng-container>
    <ng-template #loading> ... </ng-template>
    

    或者,更好的是,只需创建一个新的Observable,它将其他两个结合起来。

    data$ = combineLatest(data1$, data2$).pipe(map(([v1, v2]) => v1 && v2));
    

    比,只是

    <div *ngIf="data$ | async; else loading"> 
      ...
    </div>
    <ng-template #loading> ... </ng-template>
    

    【讨论】:

    【解决方案2】:

    你可以试试这个:

    <ng-container *ngIf="{ data1 :data$ | async, data2:data2$ | async} as data;">
    <div *ngIf="data.data1 && data.data2; else loading">
    
      {{data.data1}}
      {{data.data2}}
    </div>
    <ng-template #loading>
        loading..........
     </ng-template>
    </ng-container>
    

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 2018-08-24
      • 1970-01-01
      • 2018-05-30
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2020-02-05
      相关资源
      最近更新 更多