import { ViewContainerRef, ComponentFactoryResolver, Directive, ResolvedReflectiveProvider} from '@angular/core';
import { Router, RouterOutlet, ActivatedRoute, RouterOutletMap } from '@angular/router';
@Directive({
selector: 'router-outlet'
})
export class ApplicationRouter extends RouterOutlet {
publicRoutes: Array;
private parentRouter: Router;
private router: Router;
constructor(parentOutletMap: RouterOutletMap, location:ViewContainerRef, componentFactoryResolver: ComponentFactoryResolver, name: string) {
super(parentOutletMap, location, componentFactoryResolver, name);
this.router = _parentRouter;
}
activate(activatedRoute: ActivatedRoute, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap) {
debugger;
// return super.activate(instruction);
}
}我不知道要实例化超类的类型,目的是将授权转移到路由器级别。
发布于 2016-07-12 17:28:38
您是出于特定的原因而对扩展RouterOutlet感兴趣,还是仅仅为了向您的路由添加身份验证层?对于后者,只需将auth类从“扩展RouterOutlet”更改为“实现CanActivate”。
"AuthenticationGuard“实现的一个例子:
import { CanActivate } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate() {
if (this.authService.isLoggedIn) { return true; }
this.router.navigate(['/login']);
return false;
}
}然后,在您的路由文件中,将"CanActivate“属性添加到您想要的访问控制层:
//route file
...
{
path: 'admin',
component: CrisisAdminComponent,
canActivate: [AuthGuard]
},
...就这么简单。
发布于 2016-07-30 19:20:50
在RC4的角度升级之后,我也遇到了同样的问题。其中一个应用程序组件是扩展RouterOutlet。
随着时间的推移,RouterOutlet已经发生了很大的变化,为了使类ApplicationRouter工作,您需要通过实现CanActivate接口来利用路由器保护。
我希望这能帮到你!
https://stackoverflow.com/questions/38306909
复制相似问题