角度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>