2016-05-02 12 views
1

Ich fing an, typisierte Parameter (wie {id:int}) in meiner Wegkonfiguration zu verwenden. Wenn ein Status aufgrund des Typs nicht mit übereinstimmt, scheint otherwise nicht ausgelöst zu werden.Ansonsten für Zustände mit typisierten Parametern

Zum Beispiel:

$stateProvider 
    .state('stuff', { 
     url: '/version/{version:int}/stuff', 
     templateUrl: // ..., 
     controller: // ... 
    }) 
    .state('list', { 
     url: '/list', 
     // ... 
    }); 

$urlRouterProvider.otherwise('/list'); 

Wenn die Version "x" (kein int), ich bin nicht auf der Liste Seite umgeleitet. Stattdessen lande ich auf einer leeren Seite ohne Fehler in der Konsole.

Wie kann ich das beheben?

(Klarstellung: Ich bin in einem ungültigen URLs in der Adressleiste eingeben, dies zu testen, nicht ui-sref verwenden.)

Update: Ich glaube, ich habe festgestellt, was es verursacht (dank @ RadimKöhler für ein Beispiel, das einige Möglichkeiten eliminiert). Siehe meine plunk.

Alles funktioniert einwandfrei außer für URLs, die nicht mit einem benutzerdefinierten Typ übereinstimmen, der mit $urlMatcherFactoryProvider.type() erstellt wurde. Ich habe einen guid Typ basierend auf den Antworten auf this question verwendet.

Ich kann umgehen, indem Sie reguläre Ausdrücke in der URL verwenden, aber es wäre nett, eine Korrektur zu haben.

Weitere Informationen: Das Hinzufügen von pattern zum benutzerdefinierten Type object scheint dies zu beheben. Das Muster muss den Anker auslassen (^$), so etwas wie:

pattern: /[a-f\d]{8}-(?:[a-f\d]{4}-){3}[a-f\d]{12}/i 

Antwort

1

würde ich sagen, dass das Konzept, wie man wollte, arbeitet. Es gibt a working example

dieser Zustand def (1: 1 Frage)

$stateProvider 
    .state('stuff', { 
    url: '/version/{version:int}/stuff', 
    templateUrl: 'tpl.html', 
    controller: 'StuffCtrl', 
    }) 
    .state('list', { 
    url: '/list', 
    templateUrl: 'tpl.html', 
    controller: 'ListCtrl', 
    }); 


$urlRouterProvider.otherwise('/list'); 

werden diese Links richtig behandeln:

// list 
<a href="#/list"> 

// ui-sref 
<a ui-sref="stuff({version:1})"> 
<a ui-sref="stuff({version:2})"> 

// href 
<a href="#/version/12/stuff"> 

diese werden nicht (wie erwartet) - so werden sie keine href erstellt (solcher Zustand mit solchen Parametern existiert nicht)

<a ui-sref="stuff({version:'A'})"> 
<a ui-sref="stuff({version:'xyz'})"> 

diese href wird umgeleitet werden, um ansonsten

<a href="#/version/x/stuff"> 
<a href="#/version/AB/stuff"> 

Check it in Aktion here

+1

mit den Plunker in Adressleiste zu spielen versuchen, diese http://run.plnkr.co/ FGHZTs8XtxMwU0wW/#/version/123/stuff .. arbeiten, während das http://run.plnkr.co/FGHZTs8XtxMwU0wW/#/version/ABC/stuff (überprüfen Sie das ABC) ist umleiten zu/list –

+0

Ich verengte die Ausgabe dank dir; Es scheint mit der Verwendung von benutzerdefinierten Typen verwandt zu sein. Wenn Sie Zeit haben, sehen Sie bitte meine Bearbeitung/Plunk. – TrueWill

Verwandte Themen