<ng-container>
untuk menyelamatkan
Angular <ng-container>
adalah elemen pengelompokan yang tidak mengganggu gaya atau tata letak karena Angular tidak memasukkannya ke dalam DOM.
(...)
Ini <ng-container>
adalah elemen sintaks yang dikenali oleh pengurai Angular. Ini bukan arahan, komponen, kelas, atau antarmuka. Ini lebih seperti kurung kurawal di blok if JavaScript:
if (someCondition) {
statement1;
statement2;
statement3;
}
Tanpa kawat gigi itu, JavaScript hanya akan menjalankan pernyataan pertama saat Anda bermaksud mengeksekusi semuanya secara bersyarat sebagai satu blok. The <ng-container>
memenuhi kebutuhan yang sama di template sudut.
Jawaban asli:
Menurut permintaan tarik ini :
<ng-container>
adalah wadah logis yang dapat digunakan untuk mengelompokkan node tetapi tidak diberikan dalam pohon DOM sebagai simpul.
<ng-container>
diterjemahkan sebagai komentar HTML.
jadi templat bersudut ini:
<div>
<ng-container>foo</ng-container>
<div>
akan menghasilkan output seperti ini:
<div>
<!--template bindings={}-->foo
<div>
Jadi ng-container
berguna ketika Anda ingin menambahkan sekelompok elemen (yaitu menggunakan *ngIf="foo"
) dalam aplikasi Anda tetapi tidak ingin membungkusnya dengan elemen lain .
<div>
<ng-container *ngIf="true">
<h2>Title</h2>
<div>Content</div>
</ng-container>
</div>
akan menghasilkan:
<div>
<h2>Title</h2>
<div>Content</div>
</div>
<template>
ketika digunakan tanpa arahan.<template>
hanya akan menghasilkan<!--template bindings={}-->
dalam hal ini.<template></template>
akan menghasilkan<script></script>
lihat ini<script>
selama kompilasi, itu dihapus setelah itu, tidak ada tag tambahan di DOM. Saya percaya bahwa manual berisi informasi yang sudah usang atau hanya salah tentang itu. Bagaimanapun, terima kasih telah menunjukkan perbedaan utama antara <ng-container> dan <template>.<script></script>
. Sudah merender sesuatu seperti<!--template bindings={}-->
untuk sementara waktu. Dokumen akan segera diperbaiki.Dokumentasi ( https://angular.io/guide/template-syntax#!#star-template ) memberikan contoh berikut. Katakanlah kita memiliki kode templat seperti ini:
Sebelum itu akan diberikan, itu akan "dihapuskan". Artinya, notasi asterix akan ditranskripsi ke notasi:
Jika 'currentHero' benar, ini akan diterjemahkan sebagai
Tetapi bagaimana jika Anda menginginkan output bersyarat seperti ini:
.. dan Anda tidak ingin hasilnya dibungkus dalam wadah.
Anda dapat menulis versi de-sugared secara langsung seperti:
Dan ini akan bekerja dengan baik. Namun, sekarang kita perlu ngIf untuk memiliki tanda kurung [] bukan asterix *, dan ini membingungkan ( https://github.com/angular/angular.io/issues/2303 )
Oleh karena itu notasi yang berbeda dibuat, seperti:
Kedua versi akan menghasilkan hasil yang sama (hanya tag h1 dan p yang akan diberikan). Yang kedua lebih disukai karena Anda dapat menggunakan * ngIf seperti biasa.
sumber
ng-container
ide pengarahan datang , terima kasih :)Imo use cases untuk
ng-container
penggantian sederhana yang komponen / template khusus akan berlebihan. Dalam dokumen API mereka menyebutkan yang berikut inidan saya kira itulah masalahnya: pengelompokan barang.
Ketahuilah bahwa
ng-container
arahan jauh dari pada templat di mana arahannya membungkus konten aktual.sumber
Sebuah use case untuk itu ketika Anda ingin menggunakan tabel dengan * ngIf dan * ngFor - Saat meletakkan div di td / th akan membuat elemen tabel bertingkah salah -. Saya menghadapi masalah ini dan itulah jawabannya.
sumber
<template [ngIf]...>
. Pertanyaannya adalah perbedaan antara kedua pendekatan ini.