Angular 2 - 如何在Bootstrap之后导航?

时间:2016-07-06 06:12:23

标签: angular routing angular2-routing

我正在尝试在启动时导航到AppComponent中的另一个路径,但它似乎不起作用。在我的app.component中,我试图在我的ngOnInit方法中导航:

 export class AppComponent implements OnInit {

    constructor(private _router: Router) {
    }

    ngOnInit() {
        console.log("IN ngOnInit!!!!!!!!!!!!!!!!!!!!");
        this._router.navigate(["/login"]).then( () => console.log("DONE Navigation!!!!!!!!!!!!!!!!!!!!")).catch(err => console.log("Error!!!!!: " + err));
        console.log("GOING OUT ngOnInit!!!!!!!!!!!!!!!!!!!!");
    }
}

在我的main.ts中,我引导组件:

bootstrap(AppComponent, [
    APP_ROUTER_PROVIDERS
]).then(() => console.log("DONE BOOTSTRAP"));

控制台输出是:

IN ngOnInit!!!!!!!!!!!!!!!!!!!!
GOING OUT ngOnInit!!!!!!!!!!!!!!!!!!!!
DONE Navigation!!!!!!!!!!!!!!!!!!!!
DONE BOOTSTRAP

我的猜测是无法执行导航,因为APP_ROUTER_PROVIDERS的引导程序不完整。是否有任何可以挂钩的事件,以便我可以在引导完成后调用导航?我在Angular 2 RC4上。

提前致谢!

2 个答案:

答案 0 :(得分:2)

理想情况下,您应该负责重定向到角度路由器本身。当没有特定路线匹配时,添加一条负责将''(空白)重定向到/login页面的路线。

{
  path: '', //blank will redirectTo `/login`
  redirectTo: '/login',
  pathMatch: 'full'
},

答案 1 :(得分:1)

目前您无法在主要组件的OnInit中调用导航功能。这是由于此https://github.com/angular/angular/blob/master/modules/@angular/router/src/common_router_providers.ts#L54-L61

导致的错误

在github上打开一个问题:https://github.com/angular/angular/issues/9101

目前,快速解决方法是将导航调用放入setTimout()功能。