从 Angular 4 开始的 ngIf 新功能

角度4将在几天内到达,随之而来的是对内置的NGIF模板directive.]的极大补充也就是说,我们现在可以定义用于Else子句的模板,并且可以分配一个局部变量来保存IF子句的结果值。

以下是这两个新功能在ngIf 中的使用方法:

Else子句

因此,在过去,为了让else子句作为 ngIf 语句的一部分,你必须创建另一个** ngIf** 语句,并对第一个语句取反:

1<div *ngIf="likeThis">
2  Like this!
3</div>
4<div *ngIf="!likeThis">
5  Like that!
6</div>

但是现在我们可以为我们用ng-template定义的模板定义一个带有引用名称的else子句:

1<div *ngIf="things.car; else noCar">
2  Nice car!
3</div>
4<ng-template #noCar>
5  Call a Uber.
6</ng-template>

局部变量赋值

通常if语句的结果值不仅仅是布尔值true或false,而是一个您可能想要轻松引用的值。使用新的 ngIf ,您可以轻松地将if语句的结果赋给局部变量。例如,我们的things对象在我们的组件类中看起来像这样:

1things = {
2  car: 'Honda',
3  shoes: 'Nike',
4  shirt: 'Tom Ford',
5  watch: 'Timex'
6};

您可以这样引用if语句的结果:

1<div *ngIf="things.car; let car">
2  Nice {{ car }}!
3</div>
4<!-- Nice Honda! -->

当然,你可以将else子句和局部变量赋值结合起来:

1<div *ngIf="things.car; else noCar; let car">
2  Nice {{ car }}!
3</div>
4<ng-template #noCar>
5  Call a Uber.
6</ng-template>

带异步管道的ngif

ngIf 指令的新功能在与异步管道结合使用时变得非常强大,如来自ANGLE大学的此post]中所述。

例如,您可以使用异步管道自动订阅可观测对象,使用ELSE子句定义加载模板,并将可观测对象的结果值放入局部变量中。

让我们创建一个简单的可观察对象来演示:

 1// ...
 2import { Observable } from 'rxjs/Observable';
 3import 'rxjs/add/observable/of';
 4import 'rxjs/add/operator/delay';
 5
 6// ...
 7export class AppComponent {
 8  things$ = Observable.of({
 9    car: 'Honda',
10    shoes: 'Nike',
11    shirt: 'Tom Ford',
12    watch: 'Timex'
13  }).delay(1000);
14}

我们的可观察对象模拟网络调用,在发出数据之前等待1秒。

现在,您可以使用异步管道订阅$Observable,使用加载消息的模板定义Else子句,并声明一个本地变量,一旦Obsyable获得其数据,就可以访问该变量:

1<div *ngIf="things$ | async; else loading; let things">
2  Nice {{ things.watch }}! <!-- Nice Timex! -->
3</div>
4<ng-template #loading>
5  Loading your things...
6</ng-template>
Published At
Categories with 技术
Tagged with
comments powered by Disqus