如何在ngFor
元素中声明动态 模板引用变量?
我想使用ng-bootstrap中的popover组件,popover代码(带有Html绑定)如下所示:
<ng-template #popContent>Hello, <b>{{name}}</b>!</ng-template>
<button type="button" class="btn btn-secondary" [ngbPopover]="popContent" popoverTitle="Fancy content">
I've got markup and bindings in my popover!
</button>
我如何打包 ngFor
内的那些元素?
<div *ngFor="let member of members">
<!-- how to declare the '????' -->
<ng-template #????>Hello, <b>{{member.name}}</b>!</ng-template>
<button type="button" class="btn btn-secondary" [ngbPopover]="????" popoverTitle="Fancy content">
I've got markup and bindings in my popover!
</button>
</div>
嗯......好主意?
答案 0 :(得分:40)
模板引用变量的范围限定在它们所定义的模板中。结构指令创建了一个嵌套模板,因此引入了一个单独的范围。
因此,您可以使用一个变量作为模板参考
<div *ngFor="let member of members">
<ng-template #popupContent>Hello, <b>{{member.name}}</b>!</ng-template>
<button type="button" class="btn btn-secondary" [ngbPopover]="popupContent" popoverTitle="Fancy content">
I've got markup and bindings in my popover!
</button>
</div>
它应该有效,因为它已经在<ng-template ngFor
<强> Plunker Example 强>
有关详细信息,请参阅:
答案 1 :(得分:2)
这是我找到的最佳解决方案:https://stackoverflow.com/a/40165639/3870815
在该答案中,他们使用:
@ViewChildren('popContent') components:QueryList<CustomComponent>;
构建这些动态生成的组件的列表。强烈建议您检查一下!
答案 2 :(得分:1)
允许此操作的另一种方法是创建一个包装按钮和ng-template的组件
<div *ngFor="let member of members">
<popover-button [member]="member"></pop-over-button>
</div>
并且在弹出按钮组件中具有以下内容
<ng-template #popContent>Hello, <b>{{member.name}}</b>!</ng-template>
<button type="button" class="btn btn-secondary" [ngbPopover]="popContent" popoverTitle="Fancy content">
I've got markup and bindings in my popover!
</button>
答案 3 :(得分:-1)
您可以在trackBy: trackByFn
中使用*ngFor
<div *ngFor="let member of members;trackBy: trackByF">
<ng-template #popupContent>Hello, <b>{{member.name}}</b>!</ng-template>
<button type="button" class="btn btn-secondary" [ngbPopover]="popupContent" popoverTitle="Fancy content">
I've got markup and bindings in my popover!
</button>
</div>