Analisis ringkas unjuran kandungan dalam pembelajaran komponen Angular

青灯夜游
Lepaskan: 2021-08-09 10:25:20
ke hadapan
1632 orang telah melayarinya

Artikel ini akan membawa anda melalui unjuran kandungan dalam komponen Angular. Unjuran kandungan sangat serupa dengan slot dalam Vue dan sangat berguna apabila merangkum komponen Mari kita rasainya bersama

Analisis ringkas unjuran kandungan dalam pembelajaran komponen Angular

[Cadangan tutorial berkaitan: "tutorial sudut 》]

1 Unjurkan sekeping kandungan

Komponen bekas ditulis seperti ini

<div>
  编号1
  <ng-content></ng-content>
</div>
Salin selepas log masuk

Komponen perniagaan digunakan seperti ini

<app-page-container>
	未指定投影位置的内容会被投影到无select属性的区域
</app-page-container>
Salin selepas log masuk

2. Projek beberapa bahagian kandungan/komponen

Komponen bekas ditulis seperti ini

  • Gunakan label untuk mengunci kedudukan unjuran

  • Gunakan kelas untuk mengunci kedudukan unjuran

  • Kunci kedudukan unjuran dengan nama komponen tersuai

  • Kunci kedudukan unjuran dengan atribut tersuai

<div>
  编号2
  <ng-content select="h3"></ng-content>
  <ng-content select=".my-class"></ng-content>
  <ng-content select="app-my-hello"></ng-content>
  <ng-content select="[content]"></ng-content>
</div>
Salin selepas log masuk

Perniagaan Komponen ditunjukkan menggunakan

<app-page-container>
  <h3>使用标签锁定投影位置</h3>
  <div class="my-class">使用class锁定投影位置</div>
  <app-my-hello>使用自定义组件名称锁定投影位置</app-my-hello>
  <div content>使用自定义属性锁定投影位置</div>
</app-page-container>
Salin selepas log masuk

Analisis ringkas unjuran kandungan dalam pembelajaran komponen Angular

3. Unjuran elemen kanak-kanak

Gunakan

untuk membalut elemen kanak-kanak untuk mengurangkan lapisan dom yang tidak diperlukan, serupa dengan templatng-container

komponen kontena dalam vue ditulis seperti ini

<div>
  编号4
  <ng-content select="question"></ng-content>
</div>
Salin selepas log masuk

Komponen perniagaan ditulis seperti ini

<app-page-container>
  <ng-container ngProjectAs="question">
    <p>内容投影酷吗?</p>
    <p>内容投影酷吗?</p>
    <p>内容投影酷吗?</p>
    <p>内容投影酷吗?</p>
  </ng-container>
</app-page-container>
Salin selepas log masuk

4. Unjuran kandungan bersyarat

Penerangan laman web Cina:

  • Jika komponen anda perlu_< .

    Dalam kes ini, tidak disyorkan untuk menggunakan elemen ng-kandungan kerana selagi pengguna komponen menyediakan kandungan, walaupun komponen itu tidak pernah mentakrifkan kandungan ng elemen atau ng- Elemen kandungan terletak di dalam pernyataan
  • ngIf
  • , dan kandungan sentiasa dimulakan.

    Menggunakan elemen templat ng, anda boleh meminta komponen anda memaparkan kandungan secara eksplisit berdasarkan mana-mana syarat yang anda mahukan dan memaparkannya beberapa kali. Angular tidak memulakan kandungan elemen templat ng sehingga elemen itu dipaparkan secara eksplisit.
Gunakan
untuk menentukan blok unjuran kami

ng-container

Gunakan arahan
    untuk memaparkan
  • elemen.

    ngTemplateOutletng-template

    Gunakan arahan dinamik terbina dalam
  • untuk mengawal sama ada hendak memaparkan unjuran.
  • *ngIf

Dalam komponen perniagaan kami menggunakan
<div>
  编号3
  <ng-content select="[button]"></ng-content>
  <p *ngIf="expanded">
    <ng-container [ngTemplateOutlet]="content.templateRef"> </ng-container>
  </p>
</div>
Salin selepas log masuk
untuk membungkus elemen sebenar kami.

ng-templatekomponen my-hello hanya melakukan output log dalam ngOnInit() untuk memerhati situasi pencetakan.

Kini anda akan dapati halaman tersebut tidak ditayangkan secara normal seperti dahulu, kerana logik kita belum bersekongkol lagi, mari teruskan. Buat arahan dan daftarkannya dalam NgModule Anda mesti mendaftar untuk menggunakannya~
<app-page-container>
  <div button>
    <button appToggle>切换</button>
  </div>
  <ng-template appContent>
    <app-my-hello>有条件的内容投影~</app-my-hello>
  </ng-template>
</app-page-container>
Salin selepas log masuk

Arahan itu perlu didaftarkan~

Kami Tentukan perintah lain untuk mengawal paparan/menyembunyikan logo dalam komponen Arahan
import { Directive, TemplateRef } from &#39;@angular/core&#39;;

@Directive({
  selector: &#39;[appContent]&#39;,
})
export class ContentDirective {
  constructor(public templateRef: TemplateRef<unknown>) {}
}
Salin selepas log masuk

perlu didaftarkan~

<🎜. > dalam komponen kontena kami Ia dinyatakan dalam arahan kandungan yang baru ditakrifkan bahawa halaman pada masa ini tidak melaporkan ralat~
@Directive({
  selector: &#39;[appToggle]&#39;,
})
export class ToggleDirective {
  @HostListener(&#39;click&#39;) toggle() {
    this.app.expanded = !this.app.expanded;
  }
  constructor(public app: PageContainerComponent) {}
}
Salin selepas log masuk

Anda boleh melihat daripada log bahawa apabila kami menukar

logo komponen bekas, hanya terdapat keadaan terbuka
export class PageContainerComponent implements OnInit {

  expanded: boolean = false;

  @ContentChild(ContentDirective)
  content!: ContentDirective;

}
Salin selepas log masuk
Komponen akan dimulakan Walaupun

berikut tidak dapat melihat kandungan yang diberikan pada halaman, komponen itu sebenarnya telah dimulakan. expandedmy-hellongIf

5 @ContentChild & @ContentChildren
<div *ngIf="false">
  <ng-content *ngIf="false" select="app-my-hello"></ng-content>
</div>
Salin selepas log masuk

Gunakan kedua-dua penghias ini untuk mengeluarkan bayang Kendalikan komponen.

Gunakan anotasi untuk menentukan komponen yang diunjurkan dalam komponen perniagaan

Selepas cangkuk

dilaksanakan, Dikendalikan oleh komponen unjuran
@ContentChild(HelloWorldComp)
helloComp: HelloWorldComp;

@ContentChildren(HelloWorldComp)
helloComps: QueryList<HelloWorldComp>;
Salin selepas log masuk

ngAfterContentInit()6 @ViewChild & @ViewChildren

Gunakan dua penghias ini untuk Rujuk subkomponen. untuk mengendalikan

Gunakan anotasi untuk menentukan subkomponen dalam komponen perniagaan

Selepas cangkuk

dilaksanakan, Beroperasi terus pada sub-komponen
@ViewChild(HelloWorldComp)
helloComp: HelloWorldComp;
  
@ViewChildren(HelloWorldComp)
helloComps QueryList<HelloWorldComp>;
Salin selepas log masuk

ngAfterViewInit()Kesimpulan

Kami baru sahaja menulis di sini tentang penggunaan komponen kemahiran saya adalah terhad, jadi ayuh~

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Analisis ringkas unjuran kandungan dalam pembelajaran komponen Angular. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan