Saya mencoba mengatur sistem tab yang memungkinkan komponen untuk mendaftar sendiri (dengan judul). Tab pertama seperti kotak masuk, ada banyak tindakan / item tautan yang dapat dipilih untuk pengguna, dan masing-masing klik ini harus dapat membuat instantiate komponen baru, di klik. Tindakan / tautan datang dari JSON.
Komponen instantiated kemudian akan mendaftarkan dirinya sebagai tab baru.
Saya tidak yakin apakah ini pendekatan 'terbaik'? Sejauh ini, satu-satunya panduan yang saya lihat adalah tab statis, yang tidak membantu.
Sejauh ini, saya hanya punya layanan tab yang bootstrap di main untuk bertahan di seluruh aplikasi. Itu terlihat seperti ini:
export interface ITab { title: string; }
@Injectable()
export class TabsService {
private tabs = new Set<ITab>();
addTab(title: string): ITab {
let tab: ITab = { title };
this.tabs.add(tab);
return tab;
}
removeTab(tab: ITab) {
this.tabs.delete(tab);
}
}
Pertanyaan:
- Bagaimana saya bisa memiliki daftar dinamis di kotak masuk yang membuat tab baru (berbeda)? Saya agak menebak
DynamicComponentBuilder
akan digunakan? - Bagaimana komponen dibuat dari kotak masuk (klik) mendaftarkan diri sebagai tab dan juga ditampilkan? Saya menduga
ng-content
, tetapi saya tidak dapat menemukan banyak info tentang cara menggunakannya
EDIT: Upaya untuk mengklarifikasi.
Pikirkan kotak masuk sebagai kotak masuk surat. Item diambil sebagai JSON dan menampilkan beberapa item. Setelah salah satu item diklik, tab baru dibuat dengan 'tipe' aksi item tersebut. Jenis ini kemudian merupakan komponen.
EDIT 2: Gambar .
Jawaban:
memperbarui
Contoh 5 Sudut StackBlitz
memperbarui
ngComponentOutlet
telah ditambahkan ke 4.0.0-beta.3memperbarui
Ada
NgComponentOutlet
pekerjaan yang sedang berjalan yang melakukan sesuatu yang mirip https://github.com/angular/angular/pull/11235RC.7
Contoh plunker RC.7
Contoh penggunaan
Lihat juga angular.io LOADER KOMPONEN DINAMIS
versi yang lebih lama xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ini berubah lagi di Angular2 RC.5
Saya akan memperbarui contoh di bawah ini tetapi ini adalah hari terakhir sebelum liburan.
Contoh Plunker ini menunjukkan cara membuat komponen secara dinamis di RC.5
Perbarui - gunakan ViewContainerRef .createComponent ()
Karena
DynamicComponentLoader
sudah usang, pendekatan perlu diperbarui lagi.Contoh plunker
RC.4 Contoh plunker beta.17
Perbarui - gunakan loadNextToLocation
Contoh plunker beta.17
asli
Tidak sepenuhnya yakin dari pertanyaan Anda apa persyaratan Anda, tetapi saya pikir ini harus melakukan apa yang Anda inginkan.
The
Tabs
komponen mendapat berbagai jenis berlalu dan menciptakan "tab" untuk setiap item dalam array.Contoh plunker beta.15 (tidak didasarkan pada Plunker Anda)
Ada juga cara untuk meneruskan data yang dapat diteruskan ke komponen yang dibuat secara dinamis seperti (
someData
perlu dilewati sepertitype
)Ada juga beberapa dukungan untuk menggunakan injeksi ketergantungan dengan layanan bersama.
Untuk perincian lebih lanjut, lihat https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
sumber
DclWrapper
untuk membuatnya membuat instance aktual.ViewContainerRef
daripada menggunakanViewChild
, lalu<dcl-wrapper>
itu sendiri menjadi target. Elemen ditambahkan sebagai saudara kandung dari target dan karenanya akan berada di luar<dcl-wrapper>
dengan cara ini.''
(string kosong) `dan mengubah konstruktor menjadiconstructor(private target:ViewContainerRef) {}
, lalu komponen yang ditambahkan secara dinamis menjadi saudara kandung<dcl-wrapper>
Saya tidak cukup keren untuk berkomentar. Saya memperbaiki plunker dari jawaban yang diterima untuk bekerja untuk rc2. Tidak ada yang mewah, tautan ke CDN rusak begitu saja.
https://plnkr.co/edit/kVJvI1vkzrLZJeRFsZuv?p=preview
sumber
ada komponen yang siap digunakan (kompatibel rc5) ng2-langkah yang digunakan
Compiler
untuk menyuntikkan komponen ke kontainer langkah dan layanan untuk menghubungkan semuanya bersama-sama (sinkronisasi data)sumber