我在一个Angular 2模板中遇到了一个奇怪的赋值语法。
<template let-col let-car="rowData" pTemplate="body">
<span [style.color]="car[col.field]">{{car[col.field]}}</span>
</template>
似乎let-col和let-car="rowData"创建了两个新变量col和car,然后可以将它们绑定到模板中。
来源:https://www.primefaces.org/primeng/ /数据表/模板
这个神奇的let-*语法叫什么?
它是如何工作的?
let-something和let-something="something else"的区别是什么?
更新Angular 5
ngOutletContext重命名为ngTemplateOutletContext
参见CHANGELOG。Md @有角的/有角的
原始
模板(<template>,或自4.x起<ng-template>)作为嵌入式视图添加,并传递一个上下文。
使用let-col,上下文属性$implicit可以在绑定模板中作为col使用。
使用let-foo="bar",上下文属性bar可以作为foo使用。
例如,如果您添加一个模板
<ng-template #myTemplate let-col let-foo="bar">
<div>{{col}}</div>
<div>{{foo}}</div>
</ng-template>
<!-- render above template with a custom context -->
<ng-template [ngTemplateOutlet]="myTemplate"
[ngTemplateOutletContext]="{
$implicit: 'some col value',
bar: 'some bar value'
}"
></ng-template>
也可以看到这个答案和ViewContainerRef#createEmbeddedView。
*ngFor也是这样工作的。规范语法使这一点更加明显
<ng-template ngFor let-item [ngForOf]="items" let-i="index" let-odd="odd">
<div>{{item}}</div>
</ng-template>
NgFor将模板作为一个嵌入视图添加到DOM中,并将一些值(item, index, odd)添加到上下文中。
参见使用$ implicit传递多个参数
更新Angular 5
ngOutletContext重命名为ngTemplateOutletContext
参见CHANGELOG。Md @有角的/有角的
原始
模板(<template>,或自4.x起<ng-template>)作为嵌入式视图添加,并传递一个上下文。
使用let-col,上下文属性$implicit可以在绑定模板中作为col使用。
使用let-foo="bar",上下文属性bar可以作为foo使用。
例如,如果您添加一个模板
<ng-template #myTemplate let-col let-foo="bar">
<div>{{col}}</div>
<div>{{foo}}</div>
</ng-template>
<!-- render above template with a custom context -->
<ng-template [ngTemplateOutlet]="myTemplate"
[ngTemplateOutletContext]="{
$implicit: 'some col value',
bar: 'some bar value'
}"
></ng-template>
也可以看到这个答案和ViewContainerRef#createEmbeddedView。
*ngFor也是这样工作的。规范语法使这一点更加明显
<ng-template ngFor let-item [ngForOf]="items" let-i="index" let-odd="odd">
<div>{{item}}</div>
</ng-template>
NgFor将模板作为一个嵌入视图添加到DOM中,并将一些值(item, index, odd)添加到上下文中。
参见使用$ implicit传递多个参数