ngFor内の動的テンプレート参照変数(Angular 9)


97

要素内で動的 テンプレート参照変数を宣言するにはどうすればよい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>

うーん...何か考えはありますか?


動的参照変数のようなものはありません。なぜ動的である必要があると思いますか?
ギュンターZöchbauer

彼らのチュートリアルでは、ポップオーバー内にhtmlバインディングを含めると述べているため、を作成ng-templateしてテンプレート参照変数で参照する必要がありますが、ngFor要素内でこのポップオーバーを使用したいと思います
Boo Yan Jiong 2017年

8
同じことをしてください。テンプレート変数は、同じ名前の場合でも要素ごとに異なります。
ギュンターZöchbauer

3
すべてに同じ参照を使用するとどうなりますか?テストしましたか?
developer033

ハ、私はそれを考えたことはありません...今すぐテストします... 「インデックス」で**テンプレート参照変数を宣言する方法を考え続けているので** ...テストした後で更新されます。 ..:D
Boo Yan Jiong 2017年

回答:


99

テンプレート参照変数は、それらが定義されているテンプレートにスコープされます。構造ディレクティブはネストされたテンプレートを作成するため、別個のスコープを導入します。

したがって、テンプレート参照に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

プランカーの例

詳細については、以下も参照してください。


1
を使用している場合@ViewChild、このソリューションを使用できないことに注意してください(その後、@ AlexBoisselleのソリューションを使用する必要があります)
ランダム


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>

-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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.