如何在Router中覆盖deactive方法?

时间:2016-03-26 10:42:08

标签: typescript angular

我正在尝试使用以下代码覆盖路由器上的deactive方法:

导出类AnimationRouterOutlet扩展了RouterOutlet {     publicRoutes:any;     private parentRouter:Router;

constructor(_elementRef: ElementRef, _loader: DynamicComponentLoader,
            _parentRouter: Router, @Attribute('name') nameAttr: string) {
    super(_elementRef, _loader, _parentRouter, nameAttr);

    this.parentRouter = _parentRouter;
}

deactivate(instruction: ComponentInstruction){
    setTimeout(()=>{
        console.log("deactivvated state");
        return super.deactivate(instruction);
    },1000);
}

activate(instruction: ComponentInstruction) {
    console.log(instruction);
    return super.activate(instruction);
}

}

正如您所看到的,我正在尝试在更改网页时创建延迟 - 以便我可以创建一些动画。

但是,使用这个,我有TypeScript编译器错误:

  

:错误TS2415:类'AnimationRouterOutlet'错误地扩展了base   class'RouterOutlet'。财产'停用'的类型是   不相容。       输入'(指令:ComponentInstruction)=> void'不能赋值给''(nextInstruction:ComponentInstruction)=>   诺言'。         类型'void'不能分配给'Promise'类型。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您不能以这种方式更改被覆盖函数的返回类型。返回类型需要与超类中的返回类型相同或更专业的类型。

如果您实施CanDeactivate,您可以在路由器离开组件之前等待路由器等待的承诺。