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
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 –
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