自从 angular 2 版本更改以来,我对路由器中navigate
的功能有问题。我将版本从 2.0.0-rc.1 升级到 2.0.0-rc.3所以我不得不像这样更改路由器的版本:
@angular/路由器:2.0.0-rc.1 至 3.0.0-alpha.7
我创建了一个包含所有路由的文件。
export const routes:RouterConfig = [
{ path: '', component: Home, terminal: true },
{ path: 'home', component: Home },
{ path: 'login', component: Login },
...
然后我将路由添加到引导函数中
bootstrap(AppComponent, [
AppWebservice,
HTTP_PROVIDERS,
APP_ROUTER_PROVIDERS,
provide(Config, {useClass: Config})
]).catch(err => console.error(err));
我有一个带有此代码的组件:
ngOnInit() {
console.log('isLoggedin: ' + isLoggedin())
if (isLoggedin()) {
this.router.navigate(['/home']);
} else {
this.router.navigate(['/login']);
}
}
在此组件中,代码this.router.navigate(['/login']);
很好地与 2.0.0-rc.1 配合使用,但现在它不适用于新版本。我检查了isLoggedin()
的值,当它的值为 false 时,我仍然被重新路由到主页而不是登录页面。
有谁知道为什么路由器无法正常工作?
这是您应该如何为路线设置守卫的基本示例。
在需要重定向的路由上添加canActivate: [HomeGuard]
。
您需要创建一个服务,以便将isLoggedin
注入到防护中。
当然,还要创建警卫注射剂。
如果您有任何其他问题,请告诉我。
export const routes:RouterConfig = [
{ path: '', component: Home, terminal: true, canActivate: [HomeGuard]},
{ path: 'home', component: Home },
{ path: 'login', component: Login },
@Injectable()
export class HomeGuard implements CanActivate {
constructor(provate isLoggedinService: IsLoggedinService, private router: Router) {}
canActivate() {
console.log('this.isLoggedinService.isLoggedin: ' + this.isLoggedinService.isLoggedin())
if (this.isLoggedinService.isLoggedin()) {
this.router.navigateByUrl('home');
return false;
} else {
this.router.navigateByUrl('login');
return false;
}
}
}