2014-01-15 5 views
5

ich diese Routen haben:

$routeProvider.when('/events/agenda', {...}); 
$routeProvider.when('/events/calendar', {...}); 
$routeProvider.when('/events/:id', {...}); 

Die „/ events /: id“ „: id“ Strecke nur, wenn angepasst werden sollte, ist eine Zahl ... Zurzeit werden URLs wie "/ events/eacuterilike" von dieser Route abgeglichen.

Also, was ich tun möchte, ist mein Weg als normal zu definieren:

$routeProvider.when('/events/:id', { templateUrl: 'views/events/event-profile.html', controller: 'EventProfileCtrl', 
    resolve: { 
     event: function (EventLoader, $route) { 
      return EventLoader({ id: $route.current.params.id }); 
     } 
    }); 

, aber ich will die Verwendung des RedirectTo machen, die zur Validierung „: id“ -Wert. Wenn es eine Zahl ist, weiterhin die Ansicht und Controller, sonst umleiten:

redirectTo: function(routeParams, path, search){ 
         if (!+(routeParams.id)) // is :id a number? 
          return '/events/agenda'; 

         return null; 
        } 

aber Rückkehr null nicht die Umleitung nicht negieren.

Ich möchte wirklich nicht diese Logik auf den Controller setzen, wie ich glaube, die "URL-Matching" und Validierung sollte vor dem Wechsel zur Steuerung und Ansicht auftreten. Verstehe ich das richtig, macht es Sinn, was ich zu tun versuche?

Jede Hilfe und Vorschläge würden sehr geschätzt werden.

UPDATE: die markierte Antwort Nachdem verwendet, wie ich bald erkennen, gibt es ein Problem mit ihm war, wenn die URL-Suche params enthalten, das heißt: #/events/4450 beitreten = true

„return Pfad " dann entfernte die Suchparameter. Dies sollte eher sein:

redirectTo: function(routeParams, path, search){ 
    if (!+(routeParams.id)) // is :id a number? 
     return '/events/agenda'; 
} 

End Ergebnis:

$routeProvider.when('/events/:id', { templateUrl: 'views/events/event-profile.html', controller: 'EventProfileCtrl', 
    resolve: { 
     event: function (EventLoader, $route) { 
      return EventLoader({ id: $route.current.params.id }); 
     } 
    }, 
    redirectTo: function(routeParams, path, search){ 
     if (!+(routeParams.id)) // is :id a number? 
      return '/events/agenda'; 
    }); 
+1

Haben Sie versucht, 'return path' zu tun, anstatt' reduce null' in redirectTo zu tun. – Chandermani

+0

@Chandermani .... argh, ja, das funktioniert ... Ich habe es nicht versucht, weil Logik mir sagte, dass ich in einer Endlosschleife enden würde. Aber das eckige Team scheint etwas schlauer zu sein und sie haben es gehandhabt. Danke für die Hilfe –

+0

Hinzufügen als Antwort, so dass die Frage als beantwortet markiert werden kann. – Chandermani

Antwort

7

Doing return path; stattdessen auf return null in RedirectTo würde das Problem beheben, wie die RedirectTo eine URL zurückkehren sollte es navigieren soll.