好吧,这是我的父组件,我试图将模板nodeTemplate
传递给孩子ils-tree
<div class="nodes-panel">
<ils-tree layout="horizontal" [json]="nodes" [template]="nodeTemplate">
</ils-tree>
</div>
<ng-template #nodeTemplate>
<ng-template let-node pTemplate="default">
<p class="node-type">{{node.data.nodeType}}</p>
<p class="node-name">{{node.data.name}}</p>
</ng-template>
<ng-template let-node pTemplate="orgNode">
<p class="org-node-name">{{node.data.name}}</p>
</ng-template>
</ng-template>
子组件ils-tree
的HTML外观如下
<p-tree
[value]="nodes"
[layout]="layout"
selectionMode="single"
[(selection)]="selectedNode"
[loading]="loading"
>
<ng-container *ngTemplateOutlet="template"></ng-container>
</p-tree>
并且控制器文件具有
@Input()
template: TemplateRef<any>;
基本上,p
是无处可见,是的,数据json
已成功传递。救命!
PS 该模板在直接嵌入之间时有效。 就是
<p-tree
[value]="nodes"
[layout]="layout"
selectionMode="single"
[(selection)]="selectedNode"
[loading]="loading"
>
<ng-template let-node pTemplate="default">
<p class="node-type">{{node.data.nodeType}}</p>
<p class="node-name">{{node.data.name}}</p>
</ng-template>
<ng-template let-node pTemplate="orgNode">
<p class="org-node-name">{{node.data.name}}</p>
</ng-template>
</p-tree>
谢谢。
答案 0 :(得分:1)
我认为primeng树不允许您在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”一起使用strong>。
ils-tree.ts
如下所示:
@Input() templates: any[];
@Input() data: any;
在我的示例中,我为模板添加了一个模型,以使其更易于阅读。
您在此处有实时示例:
https://stackblitz.com/edit/angular-tree-templates