AS关键字 – 模板语法的新增功能是as关键字用于简化let语法.
我刚刚在下面的代码中实现了这个.
<div *ngIf="users | async as usersModel"> <h2>{{ usersModel.name }}</h2> <small>{{ usersModel.age }}</small> </div>
对于以下问题,我无法从任何地方获得更多细节.
问题:
> users对象和userModel对象*之间有什么区别?
> as关键字的主要用途是什么?
> as和let在模板中有什么区别?
解决方法
如果您没有使用它,您的代码将不太可读,它看起来像这样:
<div *ngIf="users | async as usersModel"> <h2>{{ (users | async)?.name }}</h2> <small>{{ (users | async).age }}</small> </div>
在此示例中,用户是Observable对象.感谢kayword,您可以在Observable对象上分配async管道的userModel结果. F.E.
如果用户是用户:Observable< User> ;;那么usersModel是用户变量上的异步管道的结果,所以它就像usersModel:User对象. 关于as和let的问题@EDIT 我不能告诉你as和let之间有什么区别,因为这是两个不同的东西. let是一个javascript变量类型,表示:
let allows you to declare variables that are limited in scope to the block
和Angular关键字一样,可以将方法/管道的结果分配给其他变量.
这是你的第一篇文章,所以我提醒一下:Angular不是编程语言,而是JavaScript框架. Angular中的大多数东西都与纯JS或TS有关.
Angular中的for循环声明是来自ECMAScript6,f.e的数组循环声明的副本.
for循环(ECMAScript6)
let iterable = [10,20,30]; for (let value of iterable) { console.log(value); }
for组件模板中的循环
<div *ngFor="let user of users">
关键字as是对方法的变量结果的赋值的快捷方式,f.e为某些管道
some.pipe.ts
@Pipe({ name: 'somePipe' }) export class SomePipe { transform(value: number): number { return number * 2; } }
使用< div * ngIf =“someValue | somePipe as otherValue”>就好像:
let otherValue = SomePipe.transform(someValue);
你懂了?
p.s:我的回答中的最后一段当然只是心理捷径.如果你想知道,ngFor和ngIf指令如何在“内部”工作,我建议你观看Nir Kaufman – Demystified Angular Directives讲座.