首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >类型X是2个模块声明的一部分(Angular 2 RC5)

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

Stack Overflow用户
提问于 2016-08-16 11:29:04
回答 3查看 17K关注 0票数 17

我正在摆弄Angular 2 RC5,遇到了以下问题:

“错误:类型WelcomeComponent是两个模块声明的一部分: 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);

我可以看到Angular在抱怨什么,welcomeRoutes需要定义WelcomeModule中的WelcomeComponentappRoutes引用welcomeRoutesrouting被导入到AppModule中,其中导入了WelcomeModule,但是我应该如何构建跨越多个模块的路由图呢?

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

import { WelcomeModule } from './welcome/welcome.module'

但是,这会违背最初拥有模块的全部目的,不是吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-16 12:56:54

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

票数 4
EN

Stack Overflow用户

发布于 2016-12-08 03:49:17

通过将声明移动到常用模块并将其包含在导出中,以便可以在其他模块中使用,这个问题对我来说很简单。下面是简化的代码示例。

@NgModule({
    imports: [CommonModule],
    declarations: [
        WelcomeComponent
    ],
    exports: [
        WelcomeComponent
    ],
    providers: [
    ]
})
票数 6
EN

Stack Overflow用户

发布于 2016-08-18 00:33:03

嗯,我第一次将WelcomeComponent添加到AppModule是通过编写

import { WelcomeModule } from './welcome/welcome.module';

因为WelcomeComponent在该模块的declarations中。

然后,我第二次添加了WelcomeComponent,方法是

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

因为WelcomeComponent是要导航到的组件,所以它似乎被隐式添加到AppModule中。

我通过将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自动成为子路由。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38966202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档