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
[Cadangan tutorial berkaitan: "tutorial sudut 》]
Komponen bekas ditulis seperti ini
<div> 编号1 <ng-content></ng-content> </div>
Komponen perniagaan digunakan seperti ini
<app-page-container> 未指定投影位置的内容会被投影到无select属性的区域 </app-page-container>
Komponen bekas ditulis seperti ini
<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>
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>
Gunakanuntuk membalut elemen kanak-kanak untuk mengurangkan lapisan dom yang tidak diperlukan, serupa dengan templat
ng-container
komponen kontena dalam vue ditulis seperti ini
<div> 编号4 <ng-content select="question"></ng-content> </div>
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>
Penerangan laman web Cina:untuk menentukan blok unjuran kamiGunakan
- Jika komponen anda perlu_< .
ngIfDalam 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
- , 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.
ng-container
ngTemplateOutlet
ng-template
*ngIf
<div> 编号3 <ng-content select="[button]"></ng-content> <p *ngIf="expanded"> <ng-container [ngTemplateOutlet]="content.templateRef"> </ng-container> </p> </div>
ng-template
komponen 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>
Arahan itu perlu didaftarkan~
Kami Tentukan perintah lain untuk mengawal paparan/menyembunyikan logo dalam komponen Arahan
import { Directive, TemplateRef } from '@angular/core'; @Directive({ selector: '[appContent]', }) export class ContentDirective { constructor(public templateRef: TemplateRef<unknown>) {} }
perlu didaftarkan~
<🎜. > dalam komponen kontena kami Ia dinyatakan dalam arahan kandungan yang baru ditakrifkan bahawa halaman pada masa ini tidak melaporkan ralat~
@Directive({ selector: '[appToggle]', }) export class ToggleDirective { @HostListener('click') toggle() { this.app.expanded = !this.app.expanded; } constructor(public app: PageContainerComponent) {} }
Anda boleh melihat daripada log bahawa apabila kami menukar
logo komponen bekas, hanya terdapat keadaan terbukaexport class PageContainerComponent implements OnInit { expanded: boolean = false; @ContentChild(ContentDirective) content!: ContentDirective; }
berikut tidak dapat melihat kandungan yang diberikan pada halaman, komponen itu sebenarnya telah dimulakan. expanded
my-hello
ngIf
<div *ngIf="false"> <ng-content *ngIf="false" select="app-my-hello"></ng-content> </div>
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>;
ngAfterContentInit()
6 @ViewChild & @ViewChildren
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>;
ngAfterViewInit()
Kesimpulan
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!