在 RC.1 中使用新路由器时如何扩展 RouterOutlet

How do I extend RouterOutlet when using the new router in RC.1

在 RC.1 中使用新路由器时,我似乎无法扩展 RouterOutlet

示例:

import { Directive } from '@angular/core';
import { Router, ROUTER_DIRECTIVES, RouterOutlet } from '@angular/router';


@Directive({
  selector: 'router-outlet'
})

export class RouterOutletDirective extends RouterOutlet {

}

错误:

@angular/router/index"' has no exported member 'RouterOutlet'.

我是做错了什么还是 RC.1 中的新路由器出了问题?


已更新:

import { Directive, Attribute, ViewContainerRef, DynamicComponentLoader } from '@angular/core';
import { Router, Routes, RouterOutletMap } from '@angular/router';
import { RouterOutlet } from '@angular/router/src/directives/router_outlet';


@Directive({
  selector: 'router-outlet'
})
export class RouterOutletDirective extends RouterOutlet {

  constructor(parentOutletMap: RouterOutletMap, _location: ViewContainerRef, name: string) {
    super(parentOutletMap, _location, name);
    console.log( parentOutletMap );
  }


  activate() {
    console.log('Activate');
  }
}

所以现在是 运行 但 RouterOutlet 带有红色下划线,类型 "any" 不是构造函数类型,而且激活部分不起作用。我错过了什么吗?

RouterOutletRouterLink 未从 @angular/router 导出。这个问题最近已经修复了,我希望这个修复会包含在 RC.2 中。

作为解决方法,您可以从私有路径 (src/...) 导入它们,直到新版本发布。

提示

也就是说,又有新的路由器在进行中。如果您目前正在从 beta 路由器或 @angular/router-derprecated 迁移到 @angular/router,最好推迟到新的新路由器推出。

这是 RC 1 版本的工作代码

import { Directive, Attribute, ViewContainerRef, DynamicComponentLoader } from '@angular/core';
import { Router, Routes, RouterOutletMap } from '@angular/router';
import { RouterOutlet } from '@angular/router/src/directives/router_outlet';

@Directive({
    selector: 'router-outlet'
})
export class LoggedInRouterOutlet extends RouterOutlet {

    constructor(parentOutletMap: RouterOutletMap, _location: ViewContainerRef, name: string){
        super(parentOutletMap, _location, name);

    }
    //activate() {} //EXPIRED
    unload(): void { }
    loadedComponent: Object
    isLoaded: boolean
    load(factory, providers, outletMap: RouterOutletMap): any {
        super.load(factory, providers, outletMap);
        //DO YOUR CHECK HERE
        return this.loadedComponent;
    }
}