我正在构建具有登录名和仪表板以及简单路由的Web应用程序;
我有两个登录选项和路由:
登录选项:
-
通过电子邮件:
login(u) { this._loginService.login(u) .subscribe(data => { console.log('Email login successful!'); this._router.navigate(['/dashboard']); });
-
使用谷歌:
googleLogin() { gapi.auth2.authorize({ client_id: * scope: 'email', response_type: 'code', prompt: 'select_account' }, (response) => { if (response.error) { return; } this._loginService.loginWithGoogle(response) .subscribe(response1 => { console.log('Google login successful!'); console.log(response); this._router.navigate(['/dashboard']); }); });
-
路由器选项:
const appRoutes: Routes = [ { path: 'dashboard', component: MainComponent}, { path: 'login', component: LoginComponent }
使用电子邮件登录成功后,路由器将导航,不会出现任何问题。
问题是,当谷歌使用谷歌登录登录并且路由器导航到/dashboard 时,应用程序会以这种方式崩溃:
- 如果我按下按钮更改路线,它只会显示它视图,而不会从 DOM 中删除我的仪表板。
- 有时登录页面不会从 DOM 中删除
- 其他函数在我的代码中不起作用。
- 控制台中没有错误
当我重新加载页面时,一切正常。
要解决这个问题,试试看!
constructor(private zone: NgZone) {
...
...
this.zone.run(() => {
this._router.navigate(['/dashboard']);
});
参考:Angular 2 ngOnInit不叫