2014-02-24 6 views
28

Ich habe eine Kundensuche-Ansicht, die standardmäßig ein Formular für Vor- und Nachname lädt. Es kann jedoch diese Parameter als Argumente in der URL verwenden. Meine App Config enthält:"optional" Params in AngularJS Zustände/Ansichten mit UI-Router

$stateProvider 
     .state({ 
      name:  "search", 
      url:   "/search", 
      templateUrl: "partials/customerSearch.html", 
      controller: "CustomerSearchCtrl" 
     }) 
     .state({ 
      name:  "searchGiven", 
      url:   "/search/:fn/:ln", 
      templateUrl: "partials/customerSearch.html", 
      controller: "CustomerSearchCtrl" 
     }) 

Das funktioniert, aber es scheint, als ob es unnötige Redundanzen hat. Gibt es einen besseren Weg? Soll das etwas sein, das $urlRouterProvider behandelt?

Antwort

25

Es gibt eine issue in ui-router tracker über optionale Parameter. Ab sofort können Sie sie nicht in klarer Weise angeben, aber Sie können reguläre Ausdrücke verwenden:

url: '/search{fn:(?:/[^/]+)?}' 

oder Abfrageparameter:

url: '/search?fn&ln' 

Menschen daran arbeiten, obwohl, so würde ich erwarte die gewünschte Funktionalität irgendwann in der Zukunft.

+1

Die erste Option doesn arbeite nicht. Für 'search/John/Smith' erhalte ich' fn = "" 'und kein' ln'. Die Verwendung von Abfrageparametern führt dazu, dass die Parameter in weiteren Zuständen/Ansichten an der URL "haften", was nicht akzeptabel ist. – N13

+10

Jetzt gefixt: https://github.com/angular-ui/ui-router/pull/1032 – amcdnl

+2

Es kann behoben sein, aber es ist nicht auf der neuesten Version (0.2.10) ab 23.06.2014. –

11

können Sie verwenden:

$stateProvider 
.state({ 
    name:  "searchGiven", 
    url:   "/search/{fn}/{ln}", 
    params: { 
     fn: {value: 'foo'}, 
     ln: {value: 'bar'} 
    }, 
    templateUrl: "partials/customerSearch.html", 
    controller: "CustomerSearchCtrl" 
}) 
+0

abgestimmt Es ist nicht optional, auch wenn wir nichts weiterleiten müssen, dann funktioniert '... com/search' nicht, aber wir müssen' ... com/verwenden suche // 'was nicht gut ist. –

3

Es ist ein Update, können Sie das:

$stateProvider.state("foo", { 
    url: "/search/{fn}/{ln}" 
}); 

Wie nateabele bei der Ausgabe kommentiert über optionale Parameter: view here

Verwandte Themen