将上下文传递到模板后未定义

时间:2019-04-30 14:39:15

标签: angular angular2-template angular2-directives

为什么在扩展模板中未定义rowData?可以将其传递给扩展模板。

<ng-template>
  <ng-container *ngTemplateOutlet="extensiontemplate; context: rowData"></ng-container>
</ng-template>

<ng-template #extensiontemplate> 
<!-- here rowData is undefined -->
</ng-template>

1 个答案:

答案 0 :(得分:1)

您必须在模板中添加变量rowData,例如:

<ng-template #extensiontemplate let-rowdata> 
    <!-- here rowData is undefined -->
</ng-template>

例如,如果您在context(rowData)中添加了$implicit属性,则此方法有效,例如,您的rowData类似于:

rowData = {$implicit: 'row data'};

如果尚未添加隐式属性,则需要在上下文中具有一个以其值为键的变量。

例如,如果您的上下文是

rowData = {somethingElse: 'row data'};

您需要使用如下模板:

<ng-template #extensiontemplate let-rowData="somethingElse"> 
    <!-- here rowData is undefined -->
</ng-template>

请参阅此文档:https://angular.io/api/common/NgTemplateOutlet

修改

对于您的情况,您要传递到另一个模板中的检索到的rowData没有任何$implicit值,您需要明确分配它,方法是:

<ng-container *ngTemplateOutlet="extensiontemplate; context: rowData"></ng-container>
<ng-template let-viewDetails="vin" #extensiontemplate>
    <tr *ngIf="viewDetails">
        <td colspan="3">
            Additional row data here for VIN ID: {{viewDetails}}                  
        </td>
    </tr>
</ng-template>

在这里检查:https://stackblitz.com/edit/angular-bmq2xi?file=src/app/app.component.html