Angularjs yollarının isteğe bağlı parametre değerleri olabilir mi?


166

İsteğe bağlı parametrelerle bir rota ayarlayabilir miyim (aynı şablon ve denetleyici, ancak yoksa bazı parametreler yok sayılmalıdır?

Peki aşağıdaki iki kuralı yazmak yerine, sadece bir tane var mı?

module.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).            
     when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

Böyle bir şey ([bu parametre isteğe bağlıdır])

when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work

Belgelerinde hiçbir şey bulamadım.


[]1.1.5 sürümünde (yok ) göz ardı edilecektir .
OZ_

Gerçekten mi? Ben 1.1.5, [: userId] kodunu denedim ve onları görmezden gelmez.
Alexandru R

olmadan deneyin []. Bu taahhüdüne bakın: github.com/angular/angular.js/commit/…
OZ_

Üzgünüz, bu $ kaynak hakkında, yönlendirmede çalışıp çalışmayacağından emin değilim. Affedersiniz.
OZ_

1
G-orge'nin cevabı iyi ise, lütfen insanların en iyi cevabı bulmak için her şeyi kaydırması gerekmeyecek şekilde işaretler misiniz?
AlexStack

Yanıtlar:


243

Angular'ın bunu desteklediği görülüyor.

En son (v1.2.0) dokümanlarından $routeProvider.when(path, route):

pathsoru işareti ( :name?) içeren isteğe bağlı adlandırılmış gruplar içerebilir


7
Sondaki eğik çizgiyi kullanmaktan kaçınmanın herhangi bir yolu var mı? Benim rota ise: .when('/claims/documents/:CLAIMS_ID/:DOCUMENT_NAME?'...url bir bölü yoksa o uymaz. Yani /claims/documents/1234/eşleşir, ama /claims/documents/1234değil.
James Bell

1
@JamesBell
Leiko

5
Açısal 1.3'ten itibaren, yukarıdaki yorumlarda bahsedilen sondaki eğik çizgi sorunu düzeltildi. / Talepler / Belgeler / 1234 / dizinine gitmek, / Talepler / Belgeler / 1234 gibi düzgün çalışır. Kısacası, sondaki eğik çizgi ile veya eğik çizgi olmadan çalışır.
Judah Gabriel Himango

1
Rotamda isteğe bağlı bir parametre varsa hala bu davranışı görüyorum. Örneğin: rota: '/: sınıflandırma? / Paket / karşılaştır' ise ve "/ paket / karşılaştır" URL'sine gitmeye çalışırsam çalışır. Herhangi bir nedenle '/ package / Compare /' denersem sınıflandırmaya asci kodunu veya gerçek bir rota olmayan '/% 3f / package / Compare' i alırım.
ruby_newbie

Belgeler kafa karıştırıcı.
Oliver Dixon

59

@ G-eorge sözü gibi, bunu şöyle yapabilirsiniz:

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
  when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

İsteğe bağlı parametrelere ihtiyacınız kadar u da yapabilirsiniz.



2

Aslında OZ_'nın biraz doğru olabileceğini düşünüyorum.

Rotanız varsa '/users/:userId've '/users/'(sondaki / karakterine dikkat edin) öğesine giderseniz $routeParams, kontrol cihazınızda userId: ""1.1.5'te bulunan bir nesne olmalıdır . Yani hiçbir parametre userIdtamamen göz ardı edilmedi, ama bence alacağın en iyisi bu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.