Saya bereksperimen dengan angular2 2.0.0-beta.0
Saya memiliki tabel dan konten garis dihasilkan oleh angular2 dengan cara ini:
<table>
<tr *ngFor="#line of data">
.... content ....
</tr>
</table>
Sekarang ini bekerja dan saya ingin merangkum konten ke dalam "baris tabel" komponen.
<table>
<table-line *ngFor="#line of data" [data]="line">
</table-line>
</table>
Dan di dalam komponen, template memiliki konten <tr> <td>.
Tapi sekarang meja itu tidak berfungsi lagi. Artinya, konten tersebut tidak lagi ditampilkan dalam kolom. Di browser, inspektur menunjukkan kepada saya bahwa elemen DOM terlihat seperti ini:
<table>
<table-line ...>
<tbody>
<tr> ....
Bagaimana saya bisa membuat ini bekerja?
tr
tag kustom Anda, itu akan digunakan, jika tidak, perilaku browser default-nya akan terjadi. Anda juga dapat menambahkan atribut atau kelas ke pemilih komponen Anda seperti<tr line-item>
dengan pemilih komponen"tr[line-item] "
atau<tr class="line-item">
dengan pemilih komponentr.line-item
. Dengan cara ini Anda memiliki kendali penuh. Saya belum mencoba semua ini sendiri di Angular2, tapi saya cukup yakin ini berhasil.tslint
mengarahkan saya ke panduan gaya yang merekomendasikan untuk tidak melakukannya. Aku tidak suka mematikan direkomendasikan linting aturan, tetapi sejauh yang saya tahu, tampaknya aturan cukup sewenang-wenang gaya dan tidak dapat dihindari dalam beberapa situasi (seperti masalah OP)<li>
atau serupa, saya tidak melihat alasan mengapa tidak menggunakannya.Saya menemukan contoh ini sangat berguna tetapi tidak berfungsi di versi 2,2.3, jadi setelah banyak garukan kepala membuatnya berfungsi kembali dengan beberapa perubahan kecil.
sumber
MyTrComponent
keapp.module.ts
dan berfungsi dengan baik.Berikut contoh penggunaan komponen dengan selektor atribut:
Keluaran:
Tentu saja template di MyTrComponent akan lebih banyak terlibat, tetapi Anda mengerti.
Old (beta.0) plunker .
sumber
Error: Uncaught (in promise): Error: Template parse errors: Can't bind to 'myTr' since it isn't a known property of 'tr'.
Menambahkan 'display: konten' ke gaya komponen berhasil bagi saya.
CSS:
HTML:
Mengapa ini berhasil?
Saat membuat instance komponen, angular (setelah dikompilasi) membungkus konten komponen di DOM sebagai berikut:
Namun agar tabel dapat ditampilkan dengan benar,
tr
tag tidak dapat dibungkus oleh apa pun.Jadi, kami menambahkan
display: contents
, ke elemen baru ini. Seperti yang saya pahami, apa yang dilakukannya adalah memberi tahu penjelajah bahwa tag ini tidak boleh dirender, dan menampilkan konten dalam seolah-olah tidak ada pembungkus. Jadi, sementara tag masih ada, itu tidak mempengaruhi secara visual ke tabel, dantr
tag diperlakukan seolah-olah mereka adalah turunan langsung daritable
tag.Jika Anda ingin menyelidiki lebih lanjut tentang cara kerja konten: https://bitsofco.de/how-display-contents-works/
sumber
contents
kerjanya, jadi saya tidak ingin meletakkan informasi di sana berdasarkan asumsi yang salah ... Saya menambahkan penjelasan sesuai yang saya pahami, tetapi jika seseorang melihat ada kesalahan di dalamnya, silakan tunjukkan ^ ^. Saya juga menambahkan tautan sehingga orang dapat menyelidiki lebih lanjut ... Satu hal yang saya perhatikan, sementara dikatakan bahwa ini tidak berfungsi di IE11, saya mencobanya di IE 11.657.18362.0 dan berfungsi dengan baik (tetapi, karena saya menggunakan sudut, mungkin ada polyfill di suatu tempat, jadi saya tidak akan menjaminnya 100% di lingkungan lain)coba ini
sumber