Seb*_*ian 0 angular2-template angular
我正在尝试使用PrimeNG的p-dataScroller构建一个通用列表组件,如下所示:
<div>
<p-dataScroller [value]="items" ...more properties...>
<template let-listItem>
<div (click)="select(listItem)">
<template [ngTemplateOutlet]="itemTemplate"
[ngOutletContext]="{'item': listItem, 'selected': listItem == selectedItem}"></template>
</div>
</template>
</p-dataScroller>
</div>
Run Code Online (Sandbox Code Playgroud)
p-dataScroller本身使用模板传播items
数组中的每个项目.
selectedItem
并且select()
是相应的通用列表组件的方法.在这个组件中,我这样声明itemTemplate
:
@ContentChild(TemplateRef)
public itemTemplate: TemplateRef<any>;
Run Code Online (Sandbox Code Playgroud)
最后我以下列方式使用我的通用列表组件:
<generic-list [items]="someArray">
<template>
<list-item [itemType]="itemType">
<template let-item>
<i class ="fa" [ngClass]="{'fa-lock': item.visibility == 0,
'fa-users': item.visibility == 1}"></i>
</template>
</list-item>
</template>
</generic-list>
Run Code Online (Sandbox Code Playgroud)
如您所见,模板组件(list-item
)本身有另一个模板!
首先,我想知道这是否存在问题(三个嵌套模板),但更重要的是,ngOutletContext
似乎没有将值添加到每个模板中list-item
.两者item
和selected
输入参数都存在于list-item组件中,但似乎没有设置它们.在调试时,Angular 2正确地将list-item组件添加为列表条目,但抛出异常,因为它缺少item
输入参数AfterContentInit
.有趣的是,itemType
输入参数设置正确,可能是因为它不属于ngOutletContext
.
我不能移动列表项组件的通用列表组件模板内,降低了复杂性,因为有几种不同类型的可以使用的物品(所有这些都具有item
,selected
等).
如何@Input()
使用另一个模板中的值正确设置模板的参数?
这一切都是正确的,除了
<generic-list [items]="someArray">
<!-- had to declare the 'ngOutletContext' values here!! -->
<template let-item-"item" let-selected="selected">
<!-- makes using it here easy -->
<list-item [item]="item" [selected]="selected" [itemType]="itemType">
<template>
...
</template>
</list-item>
</template>
</generic-list>
Run Code Online (Sandbox Code Playgroud)
这真的很难找到.找不到关于此主题的任何文档.
归档时间: |
|
查看次数: |
1501 次 |
最近记录: |