[英]Type X is part of the declarations of 2 modules (Angular 2 RC5)
我正在玩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 { }
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);
welcome.module.ts
import { NgModule } from '@angular/core';
import { WelcomeComponent } from './welcome.component';
@NgModule({
declarations: [ WelcomeComponent ]
})
export class WelcomeModule { }
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);
我可以看到什么角度抱怨, welcomeRoutes
需要WelcomeComponent
從WelcomeModule
來定義, appRoutes
引用welcomeRoutes
和routing
是進口AppModule
已WelcomeModule
進口的,但我怎么建立一個路線圖跨越多個模塊呢?
我能看到的唯一解決方案是刪除
import { WelcomeModule } from './welcome/welcome.module'
但是這樣會違背首先擁有模塊的整個目的,不是嗎?
通過將聲明移動到常用模塊並將其包含在導出中以便可以從其他模塊中使用,我只需修復此問題。 下面是簡化的代碼示例。
@NgModule({
imports: [CommonModule],
declarations: [
WelcomeComponent
],
exports: [
WelcomeComponent
],
providers: [
]
})
您為root和child加載相同的路由配置,但它們必須是不同的路由配置。 有關完整示例,請參閱https://angular.io/docs/ts/latest/guide/router.html
好吧,我第一次將WelcomeComponent
添加到AppModule
是通過寫
import { WelcomeModule } from './welcome/welcome.module';
因為WelcomeComponent
是該模塊的declarations
內部。
然后我通過寫作第二次添加了WelcomeComponent
const appRoutes: Routes = [
...welcomeRoutes
];
由於WelcomeComponent
是要導航到的組件,它似乎隱式添加到AppModule
。
我通過將app.routing.ts
更改app.routing.ts
來解決了這個問題
import {
Routes,
RouterModule
} from '@angular/router';
const appRoutes: Routes = [
{ path: '', redirectTo: '/welcome', pathMatch: 'full' }
];
export const appRoutingProviders: any[] = [];
export const routing = RouterModule.forRoot(appRoutes);
聲明welcomeRouting
為RouterModule.forChild
會自動welcome
子路由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.