Skip to content

Giriş

  • Angular nedir?
  • Temel Bilgiler
    • Genel Bakış
    • Bileşenler
    • Dinamik Verileri Yönetme
    • Dinamik Şablonları Oluşturma
    • Koşullu İfadeler ve Döngüler
    • Kullanıcı Etkileşimini Yönetme
    • Kod Paylaşımı

Kapsamlı Kılavuzlar

  • Component
    • Bir Componentin Anatomisi
    • Component’leri İçe Aktarma ve Kullanma
    • Component Seçiciler
    • Stil Componentleri
    • Input Özelliklerine Sahip Verileri Kabul Etme
    • Outputları Olan Özel Etkinlikler
    • Ng-content ile İçerik Projeksiyonu
    • Component Ana Öğeleri
    • Component Yaşam Döngüsü
    • Sorgularla Bileşen Alt Öğelerine Başvurma
    • DOM API’lerini Kullanma
    • Inheritance
    • Bileşenleri Programlı Olarak Oluşturma
    • Gelişmiş Bileşen Yapılandırması
  • Şablon Sözdizimi
    • Genel Bakış
    • Text Interpolation
    • Template Statements
    • Bağlamayı Anlama
    • Property Binding
    • En İyi Property Binding Kullanımları
    • Öznitelik Bağlama
    • Sınıf ve stil bağlama
    • Olay Bağlama
    • İki Yönlü Bağlama
    • Yerleşik Kontrol Akışı
    • Şablon Değişkenlerini Anlama
    • Şablon Olarak SVG
  • Directives
    • Directives
    • Öznitelik yönergeleri
    • Yapısal Direktifler
    • API Direktif Bileşimi

Bağımlılık Enjeksiyonu

  • Genel Bakış
  • Başlangıç
  • Dokümanlar
  • Kapsamlı Kılavuzlar
  • Component
  • Ng-content ile İçerik Projeksiyonu

Ng-content ile İçerik Projeksiyonu

Genellikle farklı içerik türleri için kapsayıcı görevi gören bileşenler oluşturmanız gerekir. Örneğin, özel bir kart bileşeni oluşturmak isteyebilirsiniz:

@Component({
  selector: 'custom-card',
  template: '<div class="card-shadow"> <!-- card content goes here --> </div>',
})
export class CustomCard {/* ... */}

<ng-content> öğesini içeriğin nereye gideceğini işaretlemek için bir yer tutucu olarak kullanabilirsiniz:

@Component({
  selector: 'custom-card',
  template: '<div class="card-shadow"> <ng-content></ng-content> </div>',
})
export class CustomCard {/* ... */}

<ng-content> ile bir bileşen kullandığınızda, bileşen ana öğesinin tüm alt öğeleri bu öğesinin konumunda oluşturulur veya yansıtılır:

// Component source
@Component({
  selector: 'custom-card',
  template: `
    <div class="card-shadow">
      <ng-content />
    </div>
  `,
})
export class CustomCard {/* ... */}
<!-- Using the component -->
<custom-card>
  <p>This is the projected content</p>
</custom-card>
<!-- The rendered DOM -->
<custom-card>
  <div class="card-shadow">
    <p>This is the projected content</p>
  </div>
</custom-card>

Angular, bu şekilde aktarılan bir bileşenin tüm alt öğelerini o bileşenin içeriği olarak ifade eder. Bu, bileşenin şablonunda tanımlanan öğelere atıfta bulunan bileşenin görünümünden farklıdır.

<ng-content> öğesi ne bir bileşen ne de DOM öğesidir. Bunun yerine, Angular’a içeriğin nerede işleneceğini söyleyen özel bir yer tutucudur. Angular’ın derleyicisi tüm öğelerini derleme zamanında işler. Çalışma zamanında öğesini ekleyemez, kaldıramaz veya değiştiremezsiniz. öğesine yönergeler, stiller veya rastgele nitelikler ekleyemezsiniz.

<ng-content> öğesini ngIf, ngFor veya ngSwitch ile koşullu olarak dahil etmemelisiniz. Bileşen içeriğinin koşullu olarak işlenmesi için  Template fragments bölümüne bakın.

Çoklu içerik yer tutucuları #

Angular, CSS seçicisine dayalı olarak birden fazla farklı öğenin farklı <ng-content> yer tutucularına yansıtılmasını destekler. Yukarıdaki kart örneğini genişletirsek, select niteliğini kullanarak bir kart başlığı ve bir kart gövdesi için iki yer tutucu oluşturabilirsiniz:

<!-- Component template -->
<div class="card-shadow">
  <ng-content select="card-title"></ng-content>
  <div class="card-divider"></div>
  <ng-content select="card-body"></ng-content>
</div>
<!-- Using the component -->
<custom-card>
  <card-title>Hello</card-title>
  <card-body>Welcome to the example</card-body>
</custom-card>
<!-- Rendered DOM -->
<custom-card>
  <div class="card-shadow">
    <card-title>Hello</card-title>
    <div class="card-divider"></div>
    <card-body>Welcome to the example</card-body>
  </div>
</custom-card>

<ng-content> yer tutucusu, bileşen seçicileriyle aynı CSS component selectors destekler.

Bir select özniteliğine sahip bir veya daha fazla <ng-content> yer tutucusu ve select özniteliğine sahip olmayan bir <ng-content> yer tutucusu eklerseniz, ikincisi bir select özniteliğiyle eşleşmeyen tüm öğeleri yakalar:

<!-- Component template -->
<div class="card-shadow">
  <ng-content select="card-title"></ng-content>
  <div class="card-divider"></div>
  <!-- capture anything except "card-title" -->
  <ng-content></ng-content>
</div>
<!-- Using the component -->
<custom-card>
  <card-title>Hello</card-title>
  <img src="..." />
  <p>Welcome to the example</p>
</custom-card>
<!-- Rendered DOM -->
<custom-card>
  <div class="card-shadow">
    <card-title>Hello</card-title>
    <div class="card-divider"></div>
    <img src="..." />
    <p>Welcome to the example></p>
  </div>
</custom-card>

Bir bileşen select özniteliği olmayan bir <ng-content> yer tutucusu içermiyorsa, bileşenin yer tutucularından biriyle eşleşmeyen hiçbir öğe DOM’da işlenmez.

Projeksiyon için içeriği takma adlandırma #

Angular, herhangi bir öğe üzerinde bir CSS seçici belirtmenize olanak tanıyan ngProjectAs adlı özel bir niteliği destekler. ngProjectAs içeren bir öğe <ng-content> bir yer tutucusuna karşı kontrol edildiğinde, Angular öğenin kimliği yerine ngProjectAs değeriyle karşılaştırır:

<!-- Component template -->
<div class="card-shadow">
  <ng-content select="card-title"></ng-content>
  <div class="card-divider"></div>
  <ng-content></ng-content>
</div>
<!-- Using the component -->
<custom-card>
  <h3 ngProjectAs="card-title">Hello</h3>
  <p>Welcome to the example</p>
</custom-card>
<!-- Rendered DOM -->
<custom-card>
  <div class="card-shadow">
    <h3>Hello</h3>
    <div class="card-divider"></div>
    <p>Welcome to the example></p>
  </div>
</custom-card>

ngProjectAs yalnızca statik değerleri destekler ve dinamik ifadelere bağlanamaz.

Neler hissediyorsun?
Share This Article :
  • Facebook
  • Twitter
  • LinkedIn
  • Pinterest
Hala sıkışık? Nasıl yardımcı olabiliriz?

Nasıl yardımcı olabiliriz?

Updated on 5 March 2024
Outputları Olan Özel EtkinliklerComponent Ana Öğeleri

Powered by BetterDocs

İçindekiler
  • Çoklu içerik yer tutucuları
  • Projeksiyon için içeriği takma adlandırma
Angular TR

Tüm hakları saklıdır