Ada beberapa Q & A directional rekursif directional di luar sana, yang semuanya datang ke salah satu solusi berikut:
- secara manual menambahkan 'kompilasi' HTML berdasarkan kondisi lingkup runtime
- tidak menggunakan arahan sama sekali, tetapi sebuah template <script> yang merujuk pada dirinya sendiri
- contoh 1 [ grup google ]
Yang pertama memiliki masalah bahwa Anda tidak dapat menghapus kode yang dikompilasi sebelumnya kecuali Anda secara komprehensif mengelola proses kompilasi manual. Pendekatan kedua memiliki masalah ... tidak menjadi arahan dan kehilangan kapabilitas yang kuat, tetapi lebih mendesak, itu tidak dapat diparameterisasi dengan cara yang sama seperti arahan bisa; itu hanya terikat ke instance controller baru.
Saya telah bermain dengan melakukan angular.bootstrap
atau @compile()
dalam fungsi tautan secara manual , tetapi itu membuat saya memiliki masalah untuk melacak dan menghapus elemen secara manual.
Apakah ada cara yang baik untuk memiliki pola rekursif berparameter yang mengelola elemen tambah / hapus untuk mencerminkan keadaan runtime? Dengan kata lain, pohon dengan tombol tambah / hapus simpul dan beberapa bidang input yang nilainya diturunkan dari simpul anak simpul. Mungkin kombinasi dari pendekatan kedua dengan lingkup dirantai (tapi saya tidak tahu bagaimana melakukan ini)?
sumber
compile: function(element) { return RecursionHelper.compile(element); }
dengancompile: RecursionHelper.compile
.Menambahkan elemen secara manual dan mengompilasinya jelas merupakan pendekatan yang sempurna. Jika Anda menggunakan ng-repeat maka Anda tidak perlu menghapus elemen secara manual.
Demo: http://jsfiddle.net/KNM4q/113/
sumber
Saya tidak tahu pasti apakah solusi ini ditemukan dalam salah satu contoh yang Anda tautkan atau konsep dasar yang sama, tetapi saya membutuhkan arahan rekursif, dan saya menemukan solusi yang hebat dan mudah .
Anda harus membuat
recursive
arahan dan kemudian membungkusnya di sekitar elemen yang membuat panggilan rekursif.sumber
[$compile:multidir] Multiple directives [tree, tree] asking for new/isolated scope on: <recursive tree="tree">
compiledContents(scope,function(clone) { iElement.append(clone); });
, "memerlukan" ed controller tidak ditangani dengan benar, dan error:Error: [$compile:ctreq] Controller 'tree', required by directive 'subTreeDirective', can't be found!
penyebab.Pada Angular 1.5.x, tidak ada lagi trik yang diperlukan, berikut ini telah dimungkinkan. Tidak perlu lagi untuk pekerjaan kotor!
Penemuan ini adalah produk sampingan dari perburuan saya untuk solusi yang lebih baik / bersih untuk arahan rekursif. Anda dapat menemukannya di sini https://jsfiddle.net/cattails27/5j5au76c/ . Ini mendukung sejauh 1.3.x.
sumber
Setelah menggunakan beberapa solusi untuk sementara waktu, saya berulang kali kembali ke masalah ini.
Saya tidak puas dengan solusi layanan karena berfungsi untuk arahan yang dapat menyuntikkan layanan tetapi tidak berfungsi untuk fragmen templat anonim.
Demikian pula, solusi yang bergantung pada struktur templat tertentu dengan melakukan manipulasi DOM dalam arahan terlalu spesifik dan rapuh.
Saya memiliki apa yang saya yakini sebagai solusi umum yang merangkum rekursi sebagai arahannya sendiri yang mengganggu secara minimal dengan arahan lain dan dapat digunakan secara anonim.
Di bawah ini adalah demonstrasi yang dapat Anda mainkan di plnkr: http://plnkr.co/edit/MSiwnDFD81HAOXWvQWIM
sumber
Sekarang karena Angular 2.0 sudah keluar dalam pratinjau, saya pikir tidak apa-apa untuk menambahkan alternatif Angular 2.0 ke dalam campuran. Setidaknya itu akan bermanfaat bagi orang-orang nanti:
Konsep kuncinya adalah membangun templat rekursif dengan referensi sendiri:
Anda kemudian mengikat objek pohon ke Templat dan menonton rekursi mengurus sisanya. Berikut ini adalah contoh lengkapnya: http://www.syntaxsuccess.com/viewarticle/recursive-treeview-in-angular-2.0
sumber
Ada solusi yang sangat sangat sederhana untuk ini yang tidak memerlukan arahan sama sekali.
Nah, dalam pengertian itu, mungkin itu bahkan bukan solusi dari masalah awal jika Anda menganggap Anda memerlukan arahan, tetapi itu ADALAH solusi jika Anda ingin struktur GUI rekursif dengan sub-struktur parametrized dari GUI. Mungkin itulah yang Anda inginkan.
Solusinya didasarkan pada hanya menggunakan ng-controller, ng-init dan ng-include. Lakukan saja sebagai berikut, asumsikan bahwa controller Anda disebut "MyController", template Anda terletak di myTemplate.html dan bahwa Anda memiliki fungsi inisialisasi pada controller Anda yang disebut init yang mengambil argumen A, B, dan C, sehingga memungkinkan untuk parametrize pengontrol Anda. Maka solusinya adalah sebagai berikut:
myTemplate.htlm:
Saya menemukan secara kebetulan bahwa struktur seperti ini dapat dibuat rekursif sesuai keinginan Anda dalam sudut vanila polos. Cukup ikuti pola desain ini dan Anda dapat menggunakan struktur UI rekursif tanpa kompilasi mengutak-atik dll.
Di dalam controller Anda:
Satu-satunya downside saya dapat melihat adalah sintaks kikuk Anda harus bertahan dengan.
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
Saya akhirnya membuat satu set arahan dasar untuk rekursi.
IMO Ini jauh lebih mendasar daripada solusi yang ditemukan di sini, dan sama fleksibel jika tidak lebih, jadi kita tidak terikat untuk menggunakan struktur UL / LI dll ... Tapi jelas itu masuk akal untuk digunakan, namun arahan tidak menyadari hal ini fakta...
Contoh super sederhana adalah:
Implementasi 'dx-start-with' an 'dx-connect' ditemukan di: https://github.com/dotJEM/angular-tree
Ini berarti Anda tidak perlu membuat 8 arahan jika Anda membutuhkan 8 tata letak yang berbeda.
Untuk membuat tampilan pohon di atas itu di mana Anda dapat menambah atau menghapus node maka akan lebih sederhana. Seperti pada: http://codepen.io/anon/pen/BjXGbY?editors=1010
Dari titik ini, controller dan template dapat dibungkus dengan direktifnya sendiri jika seseorang menginginkannya.
sumber