Angular 6中的间接递归Ng模板

时间:2018-11-19 15:35:19

标签: angular6

<ng-template #list let-Items>
    <ul>
       <li *ngFor="let i of Items">
           <ng-container [ngTemplateOutlet]="container" [ngTemplateOutletContext]="{$implicit: i}"></ng-container>
       </li> 
    </ul>
</ng-template>

<ng-template #container let-list>
// some code
<ng-container [ngTemplateOutlet]="list" [ngTemplateOutletContext]=" 
   {$implicit: list.columns}"></ng-container>
</ng-template>

我有一个包含另一个模板“ item”的模板“ container”。容器“ item”又包含“ container”

这不起作用,出现此错误:

错误TypeError:templateRef.createEmbeddedView不是函数

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

这个问题已经很老了,所以您可能已经找到了答案,但是如果有人遇到这个问题。

您遇到的问题是容器模板中的变量列表(let-list)的命名发生冲突,该变量列表覆盖了列表模板。

例如,如果您将模板重命名为listTpl(或变量),则模板应正常工作:

<ng-template #listTpl let-Items>
    <ul>
       <li *ngFor="let i of Items">
           <ng-container [ngTemplateOutlet]="container" [ngTemplateOutletContext]="{$implicit: i}"></ng-container>
       </li> 
    </ul>
</ng-template>

<ng-template #container let-list>
// some code
<ng-container [ngTemplateOutlet]="listTpl" [ngTemplateOutletContext]=" 
   {$implicit: list.columns}"></ng-container>
</ng-template>

答案 1 :(得分:0)

对于模板内部的递归,我们需要了解ng-template和templateOutlet如何在angular中一起工作。如果我们掌握了它,就可以轻松地进行递归。有关参考,请遵循以下代码。

./startFabric.sh java

已在Angular 8中进行了测试。未检查angular的早期版本。