如何扩展Angular 2 RC 4的RouterOutlet以进行身份​​验证

时间:2016-07-03 11:04:34

标签: angular angular2-routing

我已经尝试过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的正确方法吗?请帮忙.. 谢谢

1 个答案:

答案 0 :(得分:0)

在RC4中,建议您不要实现RouterOutlet,而是实现CanActivate类。

请参阅Angular 2文档的this link以了解如何执行此操作。

您只需要返回一个布尔值,表示是否允许用户通过,然后在路由中添加对该类的引用(假设您正在使用新的组件路由器)。