router.navigate不起作用(Angular6,延迟加载)

时间:2018-05-18 15:02:35

标签: angular angular6

我是Angular 4+的新手(目前正在使用v.6)。我一直在尝试使用 this.router.navigate([' / landing'])功能从登录组件重定向到登陆组件,它不是好好工作。 它将显示登录页面一秒钟,然后再次重定向回登录页面。

但是,如果我尝试浏览普通链接,例如,



<a routerLink="/landing">landing</a>
&#13;
&#13;
&#13;

它运作正常。

这是我的app-routing.module.ts

&#13;
&#13;
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  {
    path: 'login',
    loadChildren: './login/login.module#LoginModule'
  },
  {
    path: 'landing',
    loadChildren: './landing/landing.module#LandingModule'
  },
  {
    path: '',
    redirectTo: 'landing',
    pathMatch: 'full'
  },
  {
    path: '**',
    redirectTo: 'landing',
    pathMatch: 'full'
  }
];

@NgModule({
  imports: [ RouterModule.forRoot(routes) ],
  exports: [ RouterModule ]
})
export class AppRoutingModule { }
&#13;
&#13;
&#13;

这是登录组件中的代码,

&#13;
&#13;
export class LoginComponent implements OnInit {

  constructor(private router: Router) { }

  ngOnInit() {
  }

  login(){
    this.router.navigate(['/landing']);
  }
  
}
&#13;
&#13;
&#13;

以下是landing-routing.module.ts

中的代码

&#13;
&#13;
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { LandingComponent } from './landing.component';

const routes: Routes = [
  {
    path:'', component: LandingComponent
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class LandingRoutingModule { }
&#13;
&#13;
&#13;

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,如何解决:

在Component.ts

constructor(private router: Router, private route: ActivatedRoute){}

this.router.navigate(['../landing'], {relativeTo: this.route})

尝试一下,让我知道是否有帮助!

答案 1 :(得分:0)

尝试更改此内容

{
  path: 'login',
  loadChildren: './login/login.module#LoginModule'
}

对此:

{
  path: 'login',
  loadChildren: () => LoginModule
}

答案 2 :(得分:0)

但是我最好的解决方法是:

添加到构造函数中:

constructor(private readonly loader: NgModuleFactoryLoader)

然后,只有在加载模块本身之后,您才应调用navigation:

 this.loader.load(./login/login.module#LoginModule)
                .then(factory => {
                    this.router.navigate(['/landing']);
                });