Aplikasi kami memiliki navigasi 2 tingkat. Kami ingin menggunakan AngularJS $routeProvider
untuk menyediakan template secara dinamis ke file <ng-view />
. Saya sedang berpikir untuk melakukan sesuatu seperti ini:
angular.module('myApp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/:primaryNav/:secondaryNav', {
templateUrl: 'resources/angular/templates/nav/'+<<primaryNavHere>>+'/'+<<secondaryNavHere>>+'.html'
});
}]);
Saya hanya tidak tahu bagaimana mengisi bagian-bagian di dalam <<>>
. Saya tahu primaryNav dan secondaryNav terikat ke $ routeParams, tetapi bagaimana cara mengakses $ routeParams di sini untuk menyajikan template secara dinamis?
sumber
config()
hanya ke penyedia yang diteruskan, bukan instance layanan sebenarnya seperti$routePrams
.template
sajatemplateUrl
?template
ke fungsi, Anda dapat melewati$routeParams
ke dalam fungsi bahwa:$routeProvider.when('/:pNav/:sNav', { template: fn($routeParams) { return $routeParams.pNav + '/' + $routeParams.sNav + '.html' } });
. Namun, Anda tidak dapat secara dinamis menentukan pengontrol dengan cara ini :(Fitur yang sangat membantu ini sekarang tersedia mulai dari versi 1.1.2 AngularJS. Ini dianggap tidak stabil tetapi saya telah menggunakannya (1.1.3) dan berfungsi dengan baik.
Pada dasarnya Anda dapat menggunakan fungsi untuk menghasilkan string templateUrl. Fungsi ini meneruskan parameter rute yang bisa Anda gunakan untuk membuat dan mengembalikan string templateUrl.
Terima kasih banyak kepada https://github.com/lrlopez atas permintaan tariknya.
https://github.com/angular/angular.js/pull/1524
sumber
controllers
...?templateUrl dapat digunakan sebagai fungsi dengan mengembalikan URL yang dihasilkan. Kita bisa memanipulasi url dengan melewati argumen yang mengambil routeParams.
Lihat contohnya.
Semoga bantuan ini.
sumber
Baiklah, kupikir aku mengerti ...
Sedikit latar belakang pertama: Alasan saya membutuhkan ini adalah untuk menempelkan Angular di atas Node Express dan meminta Jade memproses parsial saya untuk saya.
Jadi, inilah yang harus dilakukan ... (minum bir dan habiskan 20+ jam untuk itu dulu !!!) ...
Saat Anda menyiapkan modul Anda, simpan
$routeProvider
secara global:Itu mungkin lebih banyak info daripada yang dibutuhkan ...
Pada dasarnya, Anda ingin menyimpan
$routeProvider
var Modul Anda secara global, misalnyarouteProvider
agar dapat diakses oleh Pengontrol Anda.Kemudian Anda bisa menggunakan
routeProvider
dan membuat rute BARU (Anda tidak bisa 'RESET rute' / 'Janji ulang'; Anda harus membuat yang baru), saya hanya menambahkan garis miring (/) di akhir sehingga itu semantik sebagai yang pertama.Kemudian (di dalam Controller Anda), atur
templateUrl
ke tampilan yang ingin Anda tekan.Keluarkan
controller
properti.when()
objek, jangan sampai Anda mendapatkan loop permintaan tak terbatas.Dan terakhir (masih di dalam Controller), gunakan
$location.path()
untuk mengarahkan ke rute yang baru saja dibuat.Jika Anda tertarik dengan cara menampar aplikasi Angular ke aplikasi Express, Anda dapat membagi repo saya di sini: https://github.com/cScarlson/isomorph .
Dan metode ini juga memungkinkan Anda untuk menyimpan AngularJS Bidirectional Data-Bindings jika Anda ingin mengikat HTML ke database Anda menggunakan WebSockets: jika tidak tanpa metode ini, data-binding Angular Anda hanya akan ditampilkan
{{model.param}}
.Jika Anda mengkloning ini saat ini, Anda memerlukan mongoDB di komputer Anda untuk menjalankannya.
Semoga ini menyelesaikan masalah ini!
Cody
Jangan minum air mandi Anda.
sumber
Router: -
Pengontrol: -
Saya percaya itu adalah kelemahan di angularjs bahwa $ routeParams TIDAK terlihat di dalam router. Peningkatan kecil akan membuat perbedaan dunia selama implementasi.
sumber
Saya telah menambahkan dukungan untuk ini di garpu sudut saya. Ini memungkinkan Anda untuk menentukan
https://github.com/jamie-pate/angular.js/commit/dc9be174af2f6e8d55b798209dfb9235f390b934
tidak yakin ini akan diterima karena agak bertentangan dengan grain untuk sudut, tapi ini berguna bagi saya
sumber
di index.html
firstParam dan secondParam bisa apa saja sesuai kebutuhan.
sumber
Saya mengalami masalah serupa dan saya
$stateParams
malah menggunakanrouteParam
sumber