Динамическая ссылочная переменная шаблона внутри ngFor (Angular 2)
Как объявить динамическую ссылочную переменную шаблона внутри элемента ngFor
?
Я хочу использовать компонент popover из ng-bootstrap, код 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>
Хммм... есть идеи?
Ответы
Ответ 1
Ссылочные переменные шаблона ограничиваются шаблоном, в котором они определены. Структурная директива создает вложенный шаблон и, следовательно, вводит отдельную область видимости.
Таким образом, вы можете просто использовать одну переменную для ссылки на шаблон
<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
Пример плунжера
Для более подробной информации смотрите также:
Ответ 2
Это лучшее решение, которое я нашел: fooobar.com/info/229919/...
В этом ответе они используют:
@ViewChildren('popContent') components:QueryList<CustomComponent>;
Построить список этих динамически генерируемых компонентов. Настоятельно рекомендую проверить это!