Angular 2 导入另一个 "sibling" 模块注入了错误的组件

Angular 2 importing another "sibling" module injects the wrong Component

所以我有这样的模块结构:

app 
----pages
---------dashboard
---------posts

dashboardposts都有自己的路由。

这是路由的样子:

页数

const routes: Routes = [ 
  {
    path: '',
    component: Pages,
    children: [
      { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
      { path: 'dashboard', loadChildren: './dashboard#DashboardModule' } 
      { path: 'posts', loadChildren: './posts#PostsModule' }
    ]
  }
];

export const routing = RouterModule.forChild(routes);

仪表板

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

export const routing = RouterModule.forChild(routes);

帖子

const routes: Routes = [
    {
        path: '',
        component: PostsComponent
    },
    ...
];
const routing = RouterModule.forChild(routes);

一切正常,但是当我尝试像这样在 DashboardModule 中导入 PostsModule 时:

import { PostsModule } from '../posts';

@NgModule({
  imports: [
    routing, // Dashboard routes
    CommonModule, 
    ...
    PostsModule
  ]
})
export class DashboardModule { }

并加载 http://localhost:3000/#/dashboard,它显示 PostsComponent 而不是 DashboardComponent 只是因为我导入了 "sibling" 模块

我该如何解决这个问题?

在我看来,通过将 PostsModule 加载到 DashboardModule,您还导入了 PostModule 路由,这是不正确的。由于路由定义的顺序很重要,因此页面中放置了不正确的组件

没有看到完整的模块,就不可能说出您的预期设计。但是,我会将 PostsModule 中的任何公共服务和组件分离到 PostsCommonModule:

@NgModule({
  declarations: [
     //common components
  ],
  providers; [
     //common service
  ]
})
export class PostsCommonModule { }

with 可以被 PostsModuleDashboardModule 导入:

import { PostsCommonModule  } from './posts-common.module';

@NgModule({
  imports: [PostsCommonModule]
  //...
})
export class PostsModule { }

//dashboard.module

import { PostsCommonModule  } from '../posts/posts-common.module';

@NgModule({
  imports: [PostsCommonModule]
  //...
})
export class DashboardModule { }