Я думаю, что дерево основных элементов не позволяет использовать шаблон внутри других шаблонов с правильным значением pTemplate
.
Я мог бы сделать обходной путь, объявляя разделенные шаблоны и передавая тип тоже.
Главная страница будет выглядеть так:
<ils-tree [templates]="[{type:'orgNode',template:templateOrg},
{type:'default',template:templateDefault}]"
[data]="data"></ils-tree>
<ng-template let-node="node" pTemplate="default" #templateDefault>
<p class="node-type">{{node.label}}</p>
</ng-template>
<ng-template let-node="node" pTemplate="orgNode" #templateOrg>
<p class="org-node-name">{{node.label}}</p>
</ng-template>
Тогда ils-tree.html
будет выглядеть так:
<p-tree [value]="data">
<ng-container *ngFor="let temp of templates">
<ng-template [pTemplate]="temp.type" let-node>
<ng-template [ngTemplateOutlet]="temp.template" [ngTemplateOutletContext]="{
node:node
}">
</ng-template>
</ng-template>
</ng-container>
</p-tree>
Хитрость здесь в том, чтобы передать используемый вами узел в качестве контекста с ngTemplateOutletContext в ваш шаблон, чтобы вы могли использовать его в основном с let-node = "node" .
ils-tree.ts
будет выглядеть так:
@Input() templates: any[];
@Input() data: any;
В моем примере я добавил модель для шаблонов, чтобы ее было легче читать.
У вас есть живой пример здесь :
https://stackblitz.com/edit/angular-tree-templates