ngFor 내부의 동적 템플릿 참조 변수 (Angular 9)


101

요소 내에서 동적 템플릿 참조 변수 를 선언하는 방법은 ngFor무엇입니까?

ng-bootstrap의 팝 오버 구성 요소를 사용하고 싶습니다. 팝 오버 코드 (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>

흠 ... 어떤 생각?


동적 참조 변수와 같은 것은 없습니다. 왜 동적이어야한다고 생각합니까?
Günter Zöchbauer

자신의 튜토리얼 팝 오버 내부 바인딩 HTML을 갖기 위해 말했기 때문에, 우리는을 작성해야 ng-template하고 그것을 참조 템플릿 참조 변수 지만, 지금은 내부에서이 팝 오버를 사용하려면 ngFor요소
우우 연 Jiong

8
그냥 똑같이하세요. 템플릿 변수는 이름이 같더라도 각 요소마다 다릅니다.
Günter Zöchbauer

3
모든 것에 동일한 참조 를 사용하면 어떻게됩니까 ? 테스트 해 보셨나요?
developer033

하, 저는 그런 생각을하지 않습니다. 지금 테스트하겠습니다 ... "index"를 사용 하여 ** 템플릿 참조 변수 를 선언하는 방법을 계속 생각하고 있기 때문에 ** ... 테스트 한 후에 나중에 업데이트됩니다. .. : D
우우 연의 Jiong

답변:


105

템플릿 참조 변수는 정의 된 템플릿으로 범위가 지정됩니다. 구조 지시문은 중첩 템플릿을 생성하므로 별도의 범위를 도입합니다.

따라서 템플릿 참조에 하나의 변수 만 사용할 수 있습니다.

<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

플 런커 예

자세한 내용은 다음을 참조하십시오.


1
를 사용하는 @ViewChild경우이 솔루션을 사용할 수 없습니다 (그리고 @AlexBoisselle의 솔루션을 사용해야 함)
Random

18

이것이 제가 찾은 최고의 솔루션입니다 : https://stackoverflow.com/a/40165639/3870815

그 대답에서 그들은 다음을 사용합니다.

@ViewChildren('popContent') components:QueryList<CustomComponent>;

동적으로 생성 된 구성 요소의 목록을 작성합니다. 그것을 확인하는 것이 좋습니다!


1
최고의 답변!
igg

1

이를 허용하는 또 다른 방법은 버튼과 ng- 템플릿을 감싸는 구성 요소를 만드는 것입니다.

<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>

-2

당신이 사용할 수 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.