NgFor (Angular 9) içindeki dinamik şablon referans değişkeni


97

Bir eleman içinde dinamik bir şablon referans değişkeni nasıl bildirilir ngFor?

Popover bileşenini ng-bootstrap'tan kullanmak istiyorum, açılır pencere kodu (Html ​​bağlamayla) gösterildiği gibidir:

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

Bu öğeleri içine nasıl sarabilirimngFor ?

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

Hmmm ... herhangi bir fikrin var mı?


Dinamik referans değişkenleri diye bir şey yoktur. Neden dinamik olması gerektiğini düşünüyorsunuz?
Günter Zöchbauer

öğreticileri bir açılır pencerede html bağlamanın olması için söylediği için, o zaman bir şablon referans değişkeni oluşturmalı ng-templateve buna başvurmalıyız , ancak şimdi bu açılır pencereyi bir öğenin içinde kullanmak istiyorumngFor
Boo Yan Jiong

8
Sadece aynısını yapın. Şablon değişkeni, aynı ada sahip olsa bile her öğe için farklı olacaktır.
Günter Zöchbauer

3
Her şey için aynı referansı kullanırsanız ne olur ? Test ettin mi?
geliştirici033

Ha, bunu hiç düşünmüyorum ... Şimdi test edeceğim ... çünkü "indeks" ** ile bir ** şablon referans değişkenini nasıl ilan edeceğimi düşünüyorum ... daha sonra test ettikten sonra güncellenecek. ..: D
Boo Yan Jiong

Yanıtlar:


99

Şablon referans değişkenlerinin kapsamı, içinde tanımlandıkları şablona göre ayarlanır. Yapısal bir yönerge, iç içe geçmiş bir şablon oluşturur ve bu nedenle, ayrı bir kapsam sunar.

Böylece, şablon referansınız için yalnızca bir değişken kullanabilirsiniz

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

ve çalışmalı çünkü zaten içeride ilan etti <ng-template ngFor

Plunker Örneği

Daha fazla ayrıntı için ayrıca bakınız:


1
Bir kullanıyorsanız @ViewChild, bu çözümü kullanamayacağınızı unutmayın (ve daha sonra @ AlexBoisselle'nin çözümünü kullanmalısınız)
Random


1

Buna izin vermenin başka bir yolu, düğmeyi ve ng şablonunu saran bir bileşen oluşturmaktır.

<div *ngFor="let member of members">
    <popover-button [member]="member"></pop-over-button>
</div>

Ve açılır pencere bileşeninde aşağıdakilere sahip olun:

<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

Sen kullanabilirsiniz trackBy: trackByFniçinde*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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.