typescript - Angular 2 importerar en annan "syskon"-modul injicerar fel komponent


Så jag har en modulstruktur som ser ut så här:

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

Både dashboard och posts har sin egen routning.

Här är hur routningen ser ut:

Sidor

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);

Instrumentpanel

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

export const routing = RouterModule.forChild(routes);

Inlägg

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

Allt fungerar bra men när jag försöker importera PostsModule i DashboardModule på detta sätt:

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

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

och ladda http://localhost:3000/#/dashboard, det visar PostsComponent, istället för DashboardComponent bara för att jag importerade "syskon"-modulen

Hur kan jag fixa detta?

Svar #1

Det verkar för mig som att genom att ladda PostsModule in i DashboardModule, importerar du också PostModule-rutterna, vilket är fel. Eftersom ordningen på ruttdefinitionerna är viktig, placeras den felaktiga komponenten på sidan

Utan att se de fullständiga modulerna är det omöjligt att säga vad din avsedda design är. Jag skulle dock separera alla gemensamma tjänster och komponenter från PostsModule till en PostsCommonModule:

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

vilket sedan kan importeras av både PostsModule och DashboardModule:

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 { }