2016-09-09 2 views
1

Hier ist ein Beispiel mit diesen beiden Routen:Ist es möglich, einen Zustandsparam zu haben, der wie ein Pfad mit angular-ui-router aussieht?

.state("test", { 
    url: "/test/{path}", 
    template: "<div ui-view></div>" 
}) 
.state("test.child", { 
    url: "/child", 
    template: "<p>child</p>" 
}) 

folgenden Webadressen wäre gültig:

  • /test/thing würde test 's Ansicht und $stateParams.path ist "thing"
  • /test/thing/othertest machen würde' render Ansicht und $stateParams.path ist
  • /test/thing/child würde test.child machen ‚s Ansicht und $stateParams.path ist "thing"
  • /test/thing/other/child machen würde test.child‘ s Ansicht und $stateParams.path ist "thing/other"

ich versucht habe, einen regulären Ausdruck auf dem path param verwenden, so dass es eine beliebige Zeichenfolge außer etwas dauern würde, Das endet in "/child", aber das würde mich nur in meinen Standardzustand umleiten, da es keine Übereinstimmung mit dem Regexp gibt.

Meine aktuelle Problemumgehung ist, einen anderen Separator, wie , statt / für meinen Weg param zu verwenden (gibt mir diese Art von Urls: /test/thing,other/child), und ich werde Sie daran, dass für jetzt, aber ich frage mich immer noch wenn etwas von der Art möglich war.

+0

'$ stateParams' sind nicht von Kindern afaik geerbt. Sie könnten sie stattdessen über 'resolve' verfügbar machen. Was hat in deinem Beispiel nicht funktioniert? – adamdport

+0

Wenn Sie die Routen so umordnen, dass der Pfad '/ test/child' vor der ersten Route angezeigt wurde und kein Test-Kind war (also den Status in' testChild' oder ähnliches umbenennen), hat die erste Route Vorrang über die Sekunde. Wenn Sie Dinge auflösen, müssen Sie sie erneut auflösen, aber wenn Sie es benötigen, können Sie beide untergeordneten Elemente testen, also "test.main" und "test.child", und alle Abhängigkeiten in der Master-Route auflösen für jeden eine Unterroute haben und neu anordnen. Wenn Sie damit einverstanden sind, werde ich eine Antwort posten. – forrestmid

Antwort

1

Versuch:

app.config(function ($stateProvider) { 
    $stateProvider 
    .state("test-child", { 
     url: "/test/{path:.*}/child", 
     template: "<h1>CHILD's view</h1>" 
    }) 
    .state("test", { 
     url: "/test/{path:.*}", 
     template: "<h1>TEST's view</h1>" 
    }) 
}); 

Plunker: http://plnkr.co/edit/DTO8sNr67am07csFOxR9?p=preview

Verwandte Themen