Pertanyaan saya melibatkan bagaimana untuk pergi tentang berurusan dengan bersarang kompleks template (juga disebut parsial ) dalam aplikasi AngularJS.
Cara terbaik untuk menggambarkan situasi saya adalah dengan gambar yang saya buat:
Seperti yang Anda lihat ini berpotensi menjadi aplikasi yang cukup kompleks dengan banyak model bersarang.
Aplikasi ini satu halaman, sehingga memuat index.html yang berisi elemen div di DOM dengan ng-view
atribut.
Untuk lingkaran 1 , Anda melihat bahwa ada navigasi Utama yang memuat templat yang sesuai ke dalam ng-view
. Saya melakukan ini dengan meneruskan $routeParams
ke modul aplikasi utama. Berikut ini contoh apa yang ada di aplikasi saya:
angular.module('myApp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when("/job/:jobId/zones/:zoneId", { controller: JobDetailController, templateUrl: 'assets/job_list_app/templates/zone_edit.html' }).
when("/job/:jobId/initial_inspection", { controller: JobDetailController, templateUrl: 'assets/job_list_app/templates/initial_inspection.html' }).
when("/job/:jobId/zones/:zoneId/rooms/:roomId", { controller: JobDetailController, templateUrl: 'assets/job_list_app/templates/room_edit.html' })
}]);
Di lingkaran 2 , templat yang dimuat ke dalam ng-view
memiliki sub-navigasi tambahan . Sub-nav ini kemudian perlu memuat template ke area di bawahnya - tetapi karena ng-view sudah digunakan, saya tidak yakin bagaimana cara melakukan hal ini.
Saya tahu bahwa saya dapat menyertakan templat tambahan dalam templat pertama, tetapi templat ini semuanya akan menjadi sangat kompleks. Saya ingin menyimpan semua templat terpisah agar aplikasi lebih mudah diperbarui dan tidak memiliki ketergantungan pada templat induk yang harus dimuat untuk mengakses anak-anaknya.
Di lingkaran 3 , Anda dapat melihat berbagai hal semakin kompleks. Ada kemungkinan bahwa template sub-navigasi akan memiliki sub-navigasi ke-2 yang perlu memuat template-nya sendiri juga ke area dalam lingkaran 4
Bagaimana cara seseorang menyusun struktur aplikasi AngularJS untuk menangani templat templat yang begitu rumit sambil tetap memisahkannya satu sama lain?
sumber
Jawaban:
Yah, karena saat ini Anda hanya dapat memiliki satu arahan ngView ... Saya menggunakan kontrol arahan bersarang. Ini memungkinkan Anda untuk mengatur templating dan mewarisi (atau mengisolasi) cakupan di antaranya. Di luar itu saya menggunakan ng-switch atau bahkan hanya ng-show untuk memilih kontrol yang saya tampilkan berdasarkan apa yang datang dari $ routeParams.
EDIT Berikut ini beberapa contoh pseudo-code untuk memberi Anda gambaran tentang apa yang saya bicarakan. Dengan sub navigasi bersarang.
Inilah halaman aplikasi utama
Arahan untuk sub navigasi
template untuk sub navigasi
template untuk halaman utama (dari nav primer)
Kontroler untuk halaman utama. (dari nav utama)
Arahan untuk Sub Area
sumber
PEMBARUAN: Lihat proyek baru AngularUI untuk mengatasi masalah ini
Untuk subbagian semudah memanfaatkan string di ng-meliputi:
Atau Anda dapat membuat objek jika Anda memiliki tautan ke sub halaman di semua tempat:
Atau Anda bahkan bisa menggunakannya
$routeParams
Anda juga dapat menempatkan ng-controller di level paling atas dari setiap parsial
sumber
<div ng-include="'/home/' + tab + '.html'" ng-controller="SubCtrl"></div>
untuk menggunakan pengontrol / ruang lingkup terpisah untuk sub-template. Atau cukup tentukanngController
arahan di mana saja dalam sub-templat Anda untuk menggunakan pengontrol yang berbeda untuk setiap parsial.Anda dapat checkout perpustakaan ini untuk tujuan yang sama juga:
http://angular-route-segment.com
Sepertinya apa yang Anda cari, dan itu jauh lebih mudah digunakan daripada ui-router. Dari situs demo :
JS:
HTML tingkat atas:
HTML bersarang:
sumber
Saya juga berjuang dengan pandangan bersarang di Angular.
Setelah saya mendapatkan ui-router saya tahu saya tidak akan pernah kembali ke fungsi routing default sudut.
Berikut adalah contoh aplikasi yang menggunakan beberapa tingkat penayangan bersarang
Seperti dapat dilihat ada 4 tampilan utama (view1, view2, view3, view4) dan view1 memiliki 3 tampilan anak.
sumber
$httpProvider
? Saya tidak melihatnya digunakan di mana pun.Anda dapat menggunakan ng-include untuk menghindari penggunaan n-ng dilihat.
http://docs.angularjs.org/api/ng/directive/ngInclude
http://plnkr.co/edit/ngdoc:example-example39@snapshot?p=preview
Halaman indeks saya saya gunakan ng-view. Kemudian pada halaman saya yang saya perlu memiliki frame bersarang. Saya menggunakan ng-include. Demo menunjukkan dropdown. Saya mengganti milik saya dengan tautan ng-klik. Dalam fungsi ini saya akan meletakkan $ scope.template = $ scope.templates [0]; atau $ scope.template = $ scope.templates [1];
sumber
Router ui sudut mendukung tampilan bersarang. Saya belum menggunakannya tetapi terlihat sangat menjanjikan.
http://angular-ui.github.io/ui-router/
sumber