Ich habe eine user.service.ts Datei mit einer Login-Methode:Angular 4 Routing/state Probleme
login(userName : string, password : string) {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http
.post(
this.baseUrl + '/auth/login',
JSON.stringify({ userName, password }),{ headers }
)
.map(res => res.json())
.map(res => {
localStorage.setItem('auth_token', res.auth_token);
this.loggedIn = true;
this._authNavStatusSource.next(true);
return true;
})
.catch(this.handleError);
}
, die von einem Login-Button auf meinem Login-form.component.ts genannt wird:
login({ value, valid }: { value: Credentials, valid: boolean }) {
this.submitted = true;
this.isRequesting = true;
this.errors='';
if (valid) {
this.userService.login(value.email, value.password)
.finally(() =>
this.isRequesting = false
)
.subscribe(
result => {
if (result) {
console.log("calling routing navigate");
this.router.navigate(['/connect']);
console.log(this.userService.isLoggedIn())
console.log("done");
}
},
error => this.errors = error);
}
}
}
Wenn someones Klicks mit gültigen Anmeldeinformationen wird die auth_token auf lokalen Speicher erstellt, und in der Konsole kann ich sehen das Ergebnis aus:
console.log("calling routing navigate");
this.router.navigate(['/connect']);
console.log(this.userService.isLoggedIn())
console.log("done");
es ist:
calling routing navigate
true
done
Aber es passiert nichts auf der Seite. Die Anmeldeseite bleibt erhalten und die Benutzer werden nicht auf die Seite/connect weitergeleitet, und die Anmeldeschaltfläche der Navigationsleiste wird fortgesetzt (auch wenn sie gleich ist! IsLogged).
Dann drücke ich F5 und alles geht gut. Hast du irgendwelche Gedanken darüber, was dieses Verhalten verursacht?
Mein app.module.ts:
const appRoutes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'register', component: RegistrationFormComponent },
{ path: 'login', component: LoginFormComponent },
{ path: 'logout', component: LogoutComponent},
{ path: 'connect', component: ConnectorComponent, canActivate: [AuthGuard]},
{ path: '**', redirectTo: 'home' }
]
@NgModule({
declarations: [
AppComponent,
LoginFormComponent,
LogoutComponent,
ConnectorComponent,
HomeComponent
],
providers: [AuthGuard, ConfigService, UserService, AuthModule],
imports: [
CommonModule,
HttpModule,
FormsModule,
DashboardModule,
AuthModule,
RouterModule.forRoot(appRoutes)
]
})
Sehen Sie Fehler in der Konsole? Die Hauptgründe dafür, dass eine Route nicht angezeigt wird, ist, dass ein Fehler generiert wurde oder dass die Routen nicht entsprechend konfiguriert sind. Wie ist Ihre Verbindungsroute konfiguriert? – DeborahK
haben Sie die 'in der index.html Seitenkopfzeile –
@DeborahK keine Fehler auf der Konsole gesetzt. Alle meine Routen sind auf meinem Hauptmodul und funktionieren korrekt, wenn ich direkt aus dem Browser gehe. Manchmal, wenn ich weiterhin auf Anmelden klicke, ändert sich die Seite (?). –