在@NgModule中,如何打开由于用户类型之类的东西而导致的不同组件

时间:2016-08-24 09:18:55

标签: angular router

在@NgModule中,如何根据用户类型?

打开不同的组件

我有一个NgModule,有两个不同的页面,我想根据用户类型打开不同的页面

@NgModule({
imports: [ SharedModule ,RouterModule.forChild([
{ path: 'edit', component: EditComponent },
{ path: 'view', component: ViewComponent }
])],

declarations: [
EditComponent, ViewComponent
],

})
export default class MainModule { 
constructor(private u:UserService){
   //------

   //------
} 
}

环境是:RC5

3 个答案:

答案 0 :(得分:0)

注入路由器并致电navigate(...)

@NgModule({
  imports: [ SharedModule ,RouterModule.forChild([
    { path: 'edit', component: EditComponent },
    { path: 'view', component: ViewComponent },
  ])],
  declarations: [
    EditComponent, ViewComponent
  ],
})
export default class MainModule { 
  constructor(private u:UserService, router:Router, ){
    if(u.type=='manager') {
      router.navigate(['/edit']);
    } else {
      router.navigate(['/view']);
    }
  } 
}

另见Angular 2 router.navigate

答案 1 :(得分:0)

这样的事情:

 if (this.user.userType === UserType.x1) {
  this.router.navigate(['/edit']); } 
else if (this.user.userType === UserType.x2) {
            this.router.navigate(['/view']);
}

答案 2 :(得分:0)

经过测试: 在延迟加载模式下,   在ngModule中写入此代码会导致无限循环

constructor(private router:Router){
     console.log("MainModule 39");
     this.router.navigateByUrl("/tabs-demo/tab3");
}

不处于延迟加载模式时    在ngModule中写入该代码可能会导致

Unhandled Promise rejection: Bootstrap at least one component before injecting Router

答案是: 在第一个组件中写入导航代码。

在RC5中进行测试

感谢。