Saya ingin menampilkan data dalam struktur pohon di aplikasi web. Saya berharap menggunakan Angular untuk tugas ini.
Sepertinya ng-repeat akan memungkinkan saya untuk beralih melalui daftar node, tetapi bagaimana saya bisa melakukan bersarang ketika kedalaman node yang diberikan meningkat?
Saya mencoba kode berikut , tetapi pelolosan otomatis dari HTML mencegahnya bekerja. Plus, tag ul akhir berada di tempat yang salah.
Saya cukup yakin bahwa saya akan menyelesaikan masalah ini dengan cara yang salah.
Ada ide?
Jawaban:
Lihatlah biola ini
Asli: http://jsfiddle.net/brendanowen/uXbn6/8/
Diperbarui: http://jsfiddle.net/animaxf/uXbn6/4779/
Ini akan memberi Anda ide yang baik tentang cara menampilkan
tree like structure
sudut menggunakan. Ini semacam menggunakan rekursi dalam html!sumber
Jika Anda menggunakan Bootstrap CSS ...
Saya telah membuat kontrol pohon sederhana yang dapat digunakan kembali (direktif) untuk AngularJS berdasarkan daftar Bootstrap "nav". Saya menambahkan lekukan ekstra, ikon, dan animasi. Atribut HTML digunakan untuk konfigurasi.
Itu tidak menggunakan rekursi.
Saya menyebutnya angular-bootstrap-nav-tree (nama yang mudah diingat, bukan?)
Ada contoh di sini , dan sumbernya ada di sini .
sumber
Ketika membuat sesuatu seperti ini, solusi terbaik adalah arahan rekursif. Namun, ketika Anda membuat arahan Anda menemukan bahwa AngularJS masuk ke loop tanpa akhir.
Solusi untuk ini adalah membiarkan direktif menghapus elemen selama acara kompilasi, dan secara manual mengkompilasi dan menambahkannya di acara tautan.
Saya menemukan ini di utas ini , dan mengabstraksikan fungsi ini menjadi sebuah layanan .
Dengan layanan ini Anda dapat dengan mudah membuat arahan pohon (atau arahan rekursif lainnya). Berikut adalah contoh arahan pohon:
Lihat Plunker ini untuk demo. Saya suka solusi ini karena:
Pembaruan: Dukungan tambahan untuk fungsi penautan kustom.
sumber
angular-ui-tree tampaknya melakukan pekerjaan yang baik untuk saya
sumber
Berikut ini contoh menggunakan arahan rekursif: http://jsfiddle.net/n8dPm/ Diambil dari https://groups.google.com/forum/#!topic/angular/vswXTes_FtM
sumber
Yang ini sepertinya sedikit lebih lengkap: https://github.com/dump247/angular.tree
sumber
Contoh lain berdasarkan sumber aslinya , dengan struktur pohon sampel sudah ada (lebih mudah untuk melihat cara kerjanya IMO) dan filter untuk mencari pohon:
JSFiddle
sumber
Banyak sekali solusi hebat, tapi saya merasa semuanya sedikit rumit.
Saya ingin membuat sesuatu yang menciptakan kembali kesederhanaan dari awnser @Mark Lagendijk, tetapi tanpa itu mendefinisikan template dalam direktif, tetapi akan membiarkan "pengguna" membuat template dalam HTML ...
Dengan gagasan yang diambil dari https://github.com/stackfull/angular-tree-repeat dll ... Saya akhirnya membuat proyek: https://github.com/dotJEM/angular-tree
Yang memungkinkan Anda untuk membangun pohon Anda seperti:
Yang bagi saya lebih bersih daripada harus membuat banyak arahan untuk pohon-pohon yang terstruktur berbeda .... Pada dasarnya menyebut di atas pohon agak salah, ia mengambil jauh lebih banyak dari awnser @ ganaraj tentang "templat rekursif", tetapi memungkinkan kita untuk tentukan template tempat kita membutuhkan pohon.
(Anda bisa melakukannya dengan template berbasis tag skrip, tetapi masih harus duduk tepat di luar simpul pohon yang sebenarnya, dan itu masih terasa agak yuk ...)
Ditinggalkan di sini hanya untuk pilihan lain ...
sumber
Anda dapat mencoba dengan sampel Angular-Tree-DnD dengan Angular-Ui-Tree, tetapi saya diedit, kompatibilitasnya dengan tabel, kisi, daftar.
sumber
Berdasarkan @ganaraj 's jawaban , dan @ dnc253' s jawaban , saya hanya membuat sederhana 'direktif' untuk struktur pohon memiliki memilih, menambahkan, menghapus, dan mengedit fitur.
Jsfiddle: http://jsfiddle.net/yoshiokatsuneo/9dzsms7y/
HTML:
JavaScript:
sumber
Ya itu pasti mungkin. Pertanyaan di sini mungkin mengasumsikan Angular 1.x, tetapi untuk referensi di masa mendatang saya menyertakan contoh Angular 2:
Secara konseptual yang harus Anda lakukan adalah membuat templat rekursif:
Anda kemudian mengikat objek pohon ke templat dan membiarkan Angular mengerjakan keajaibannya. Konsep ini jelas berlaku untuk Angular 1.x juga.
Berikut adalah contoh lengkapnya: http://www.syntaxsuccess.com/viewarticle/recursive-treeview-in-angular-2.0
sumber
Anda dapat menggunakan angular-recursion-injector untuk itu: https://github.com/knyga/angular-recursion-injector
Memungkinkan Anda melakukan sarang yang tidak terbatas dengan pengkondisian. Apakah kompilasi hanya jika diperlukan dan hanya mengkompilasi elemen yang tepat. Tidak ada keajaiban dalam kode.
Salah satu hal yang memungkinkannya bekerja lebih cepat dan lebih sederhana maka solusi lain adalah sufiks "- recursion".
sumber
Ketika struktur pohon besar, Angular (hingga 1.4.x) menjadi sangat lambat dalam merender template rekursif. Setelah mencoba sejumlah saran ini, saya akhirnya membuat string HTML sederhana dan menggunakan
ng-bind-html
untuk menampilkannya. Tentu saja, ini bukan cara untuk menggunakan fitur AngularFungsi rekursif tanpa tulang ditampilkan di sini (dengan HTML minimal):
Dalam templat, hanya perlu satu baris ini:
Ini memotong semua data Angular yang mengikat dan hanya menampilkan HTML dalam sepersekian waktu dari metode templat rekursif.
Dengan struktur menu seperti ini (sebagian file pohon dari sistem file Linux):
Outputnya menjadi:
sumber
Tidak rumit.
kode pengontrol:
sumber