我已经尝试过CanActivate(Angular文档)并且它有效。由于我必须将其添加到需要安全性的每个路由中,我想扩展RouterOutlet并在路由建立之前检查身份验证。
import {Directive, ViewContainerRef, ComponentFactoryResolver, ResolvedReflectiveProvider} from '@angular/core';
import {Router} from '@angular/router/src/router';
import {RouterOutletMap} from '@angular/router/src/router_outlet_map';
import {RouterOutlet} from '@angular/router/src/directives/router_outlet';
import {ActivatedRoute} from '@angular/router/src/router_state';
@Directive({
selector: 'router-outlet'
})
export class SecuredRouterOutlet extends RouterOutlet {
constructor(outletMap: RouterOutletMap,
location: ViewContainerRef,
componentFactoryResolver: ComponentFactoryResolver,
name: string) {
super(outletMap, location, componentFactoryResolver, name);
}
activate(activatedRoute: ActivatedRoute, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap) {
/* TODO : Check for authentication */
return super.activate(activatedRoute, providers, outletMap);
}
}
我收到错误 提供的参数与调用目标的任何签名都不匹配。 表示构造函数中的super()方法。 这是扩展RouterOutlet的正确方法吗?请帮忙.. 谢谢
答案 0 :(得分:0)
在RC4中,建议您不要实现RouterOutlet,而是实现CanActivate类。
请参阅Angular 2文档的this link以了解如何执行此操作。
您只需要返回一个布尔值,表示是否允许用户通过,然后在路由中添加对该类的引用(假设您正在使用新的组件路由器)。