我在Angular 2模板中遇到了一个奇怪的赋值语法.

<template let-col let-car="rowData" pTemplate="body">
    <span [style.color]="car[col.field]">{{car[col.field]}}</span>
</template>

似乎let-collet-car="rowData"创建了两个新变量colcar,然后可以将它们绑定到模板内部.

资料来源:https://www.primefaces.org/primeng/#/datatable/templating

这个神奇的let-*语法叫什么?

它是如何工作的?

let-somethinglet-something="something else"有什么区别?

推荐答案

update Angular 5

ngOutletContext更名为ngTemplateOutletContext

另见第CHANGELOG.md @ angular/angular

original

模板(从4.x开始为<template><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>

另请参见this answerViewContainerRef#createEmbeddedView.

*ngFor也是这样.规范语法使这一点更加明显

<ng-template ngFor let-item [ngForOf]="items" let-i="index" let-odd="odd">
  <div>{{item}}</div>
</ng-template>

其中,NgFor将模板作为嵌入视图添加到DOM中,用于items中的每item个,并向上下文添加一些值(itemindexodd).

另见Using $implict to pass multiple parameters

Angular相关问答推荐

FormArray包含嵌套的FormGroups.如何访问嵌套的表单组控件?

Angular路由不响应子路由的子路由

从、管道和映射可观察到的逻辑?

首期日历发行

类是一个独立的组件,不能在Angular中的`@NgModule.bootstrap`数组中使用

一个接一个的Angular http请求,但只关心第一个

用于 React 的 ngx-extended-pdf-viewer

Angular 15 Ref 错误:初始化前无法访问组件 A

NGX-Translate如何不得到404?

http 调用的 RxJs 数组

Angular:为什么在 ngAfterContentInit 之后变量未定义?

导入 AngularFirestoreModule 时出现问题:此类型参数可能需要 `extends firebase.firestore.DocumentData` 约束.

角 12 固态继电器 |页眉页脚在加载程序到来之前显示

Angular SPA 和 .Net 6 API 之间未连接 Application Insights Map

如何在插值中编写条件?

如何从组件模板将数组作为 Input() 传递?

未绑定断点 - VS Code | Chrome | Angular

将 Angular 5 升级到 6 时,我得到不兼容的对等依赖(使用 ng update @angular/core)

angular2中的httpinterceptor类似功能是什么?

如何从materialAngular使用分页器?