2017-02-23 67 views
5

我想通过在其自己的打字稿文件中定义它来将我的路由模块与另一个模块分开。但我得到上述错误:组件是两个模块的声明的一部分:组件是两个模块声明的一部分:AppRoutingModule和AppModule

AppRoutingModule

import { NgModule } from '@angular/core' 
import { RouterModule, Routes } from '@angular/router' 
import { AdminHomeComponent } from './nav/adminhome.component' 
import { UserHomeComponent } from './nav/userhome.component' 
import { ContactComponent } from './nav/contact.component' 
import { LandingComponent } from './nav/mainhome.component' 
import { LoginFormComponent } from './nav/login.component' 


const appRoutes: Routes = [ 
    { path: 'login', component: LoginFormComponent }, 
    { path: 'adminHome', component: AdminHomeComponent }, 
    { path: 'userHome', component: UserHomeComponent }, 
    { path: 'contact', component: ContactComponent }, 
    { path: '', component: LandingComponent } 
]; 


@NgModule({ 
    imports: [ 
     RouterModule.forRoot(appRoutes) 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class AppRoutingModule { } 

的AppModule

:下面两个模块AppRoutingModule和的AppModule

共享

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule } from '@angular/forms'; 
import { AppComponent } from './app.component'; 
import { HttpModule } from '@angular/http'; 
import { AppRoutingModule} from './app.routing' 

import { AdminHomeComponent } from './nav/adminhome.component' 
import { UserHomeComponent } from './nav/userhome.component' 
import { ContactComponent } from './nav/contact.component' 
import { LandingComponent } from './nav/mainhome.component' 
import { LoginFormComponent } from './nav/login.component' 
import { ShareService } from './nav/ShareService' 
//import { PaginationModule } from 'ng2-bootstrap'; 
//import { Ng2PaginationModule } from 'ng2-pagination'; 

@NgModule({ 
    imports: [BrowserModule, FormsModule, HttpModule, AppRoutingModule ], 
    declarations: [AppComponent, AdminHomeComponent, UserHomeComponent, ContactComponent, LandingComponent, LoginFormComponent], 
    bootstrap: [AppComponent], 
    providers: [ShareService] 

}) 
export class AppModule { } 

我跟着https://angular.io/docs/ts/latest/guide/router.html路由文档,但降落在这样的错误。

有人可以看看是否有可能在代码中存在一些错误。谢谢。

+0

错误消息是否说明哪些组件是这两个模块的一部分? –

+0

是的。 AdminHomeComponent。 –

+0

这是可重复的在一个plunk? – Amit

回答

1

我想你应该移动AdminHomeComponent和在AppRoutingModule引用出来的AppModule成不同的模块(S)和该模块(S)增加的AppRoutingModuleimports所有其他组件。

+0

但是我的实现有什么问题。这是根据角度文档。如果再定义一个模块只是为了定义组件,那将是一个矫枉过正的问题。 –

+0

AFAIK路由器添加的组件会自动添加到模块的entryComponents和声明中,在路径中使用它们时,在导入的模块中找不到它们。我不知道文档(并不意味着没有),因为组件不能成为多个模块的一部分,导致错误。 –

+0

但你有没有检查文档。为什么不提这样的事情? –

0

它不可能!

您可以创建一个包含该组件的模块并将其导入到您的模块中。

+0

我没有明白你的意思。你能否详细说明一下? –

+0

1.创建新模块(例如AdminModule) 2.这个模块 4.导入AdminModule你的模块在此模块中定义AdminHomeComponent 3.出口AdminHomeComponent你需要AdminHomeComponent –

+0

那正是我所做的如冈特的建议其他答案。如果你看到与Gunter的聊天,你会知道我只遵循了这个过程。 –

0

我不能评论我会写这个答案。

这很奇怪,因为它的代码应该工作。我尝试了相同的逻辑,并为我工作。

您能否尝试从appRoutes中删除AdminHomeComponent,并查看它是否仅为AdminHomeComponent或其他组件是否也引发同样的问题。

如果您也有与其他组件相同的问题。尝试在你的路由模块中声明它们,看看它是否有效(但这不是一个好习惯)。

还有一个办法吧:

APP-routing.module.ts

import { Host, ModuleWithProviders } from '@angular/core'; 
import { RouterModule, Routes } from '@angular/router'; 
import { OtherComponent } from './other.component'; 
import { HomeComponent } from './home.component'; 

const appRoutes: Routes = [ 
    { path: 'home', component: HomeComponent }, 
    { path: 'other', component: OtherComponent}, 
    { path: '', component: HomeComponent } 
]; 

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes); 

app.module.ts

import { routing } from './app-routing.module'; 
import { OtherComponent } from './other.component'; 
import { HomeComponent } from './home.component'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import { AppComponent } from './app.component'; 


@NgModule({ 
    declarations: [ 
    AppComponent, 
    HomeComponent, 
    OtherComponent 
], 
imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    routing 
], 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

就个人而言,我会做其他2个答案中的建议。

顺便说一句,你的应用程序中是否有其他模块?

+0

它在每个模块中引发错误,因为它们都在模块中重复。您的答案也没有指出解决方案的方向,因为它也在多个模块中导入组件,这就是所关心的问题。 –

相关问题