类型X是2个模块声明的一部分(Angular 2 RC5)

Tho*_*der 17 angular

我正在玩Angular 2 RC5,并遇到了以下问题:

"错误:类型WelcomeComponent是2个模块声明的一部分:WelcomeModule和AppModule!

app.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { Routes, RouterModule }  from '@angular/router';
import { WelcomeModule } from './welcome/welcome.module';
import { AppComponent }  from './app.component';
import { 
    routing, 
    appRoutingProviders 
} from './app.routing';

@NgModule({
  imports:      [ 
  BrowserModule, 
  RouterModule, 
  WelcomeModule,
  routing
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ],
  providers:    [ appRoutingProviders ]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

app.routing.ts

import { 
    Routes,
    RouterModule 
} from '@angular/router';

import { welcomeRoutes } from './welcome/welcome.routing';

const appRoutes: Routes = [
     ...welcomeRoutes
];

export const appRoutingProviders: any[] = [];
export const routing = RouterModule.forRoot(appRoutes);
Run Code Online (Sandbox Code Playgroud)

welcome.module.ts

import { NgModule } from '@angular/core';

import { WelcomeComponent } from './welcome.component';

@NgModule({
    declarations: [ WelcomeComponent ]
})
export class WelcomeModule { }
Run Code Online (Sandbox Code Playgroud)

welcome.routing.ts

import { 
    Routes,
    RouterModule 
} from '@angular/router';

import { WelcomeComponent } from './welcome.component';

export const welcomeRoutes: Routes = [
    { path: 'welcome', component: WelcomeComponent }
];

export const welcomeRoutingProviders: any[] = [];
export const welcomeRouting = RouterModule.forChild(welcomeRoutes);
Run Code Online (Sandbox Code Playgroud)

我可以看到什么角度抱怨,welcomeRoutes要求WelcomeComponentWelcomeModule被定义,appRoutes引用welcomeRoutesrouting进口在AppModule已经WelcomeModule进口的,但我怎么建立一个路线绘制跨越多个模块呢?

我能看到的唯一解决方案是删除

import { WelcomeModule } from './welcome/welcome.module'
Run Code Online (Sandbox Code Playgroud)

但是这样会违背首先拥有模块的整个目的,不是吗?

My *_*eth 6

通过将声明移动到常用模块并将其包含在导出中以便可以从其他模块中使用,我只需修复此问题.下面是简化的代码示例.

@NgModule({
    imports: [CommonModule],
    declarations: [
        WelcomeComponent
    ],
    exports: [
        WelcomeComponent
    ],
    providers: [
    ]
})
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 4

您为 root 和 child 加载相同的路由配置,但它们必须是不同的路由配置。有关完整示例,请参阅https://angular.io/docs/ts/latest/guide/router.html