2017-01-27 4 views
0

In Ordnung ... Also ich habe UI Router und Rails-Vorlagen installiert, um AngujarJs in meinem Projekt zu behandeln. Bis jetzt ist alles in Ordnung. Außer wenn man die URL manuell in die Leiste von chrome eingibt (zum Beispiel localhost: 3000/sign_in) bekomme ich 'No routes matches für/sign_in' (Ruby error).Ruby auf Schienen und UI Router funktioniert nicht richtig

Aber wenn ich in meiner App habe ich eine Schaltfläche zum Ändern meines Status ($ state.go) zu diesem sign_in Sicht, funktioniert gut.

Was passiert?

Antwort

0

Was passiert, ist, dass Ihre eckige App die Änderungen an der Adressleiste für ihre eigenen Zwecke abfängt und verhindert, dass der Browser eine HTTP-Anfrage an die neue URL sendet, also ist alles gut nachdem die App initialisiert wurde.

Wenn Sie die Seite neu laden, wird die js-App zunächst nicht geladen, daher sendet der Browser den Speicherort bei einer neuen Seitenladung an den Server. Da der Server die Routen der eckigen App nicht kennt, versucht er, mit seinem eigenen Handler zu antworten, der in diesem Fall nicht existiert.

Der einfachste Weg, um dies jetzt zu beheben, ist wahrscheinlich, ändern Sie Ihre UI-Router-Konfiguration mit einem # in der URL enthalten.

angular.module('app', ['ui.router']) 
    ...snip 
    $locationProvider.html5Mode(false); 
}); 

Das sollte mit einem # vor dem eckigen Teil der Route beginnen. Der neue Pfad wäre "/ #/sign_in". Der Browser wird wissen, dass "/" vor # an den Server gesendet werden muss, damit die Seite mit der angularen Init in int dargestellt wird, und eckig den "/ sign_in" -Teil nach dem # verarbeiten kann.

Verwandte Themen