2016-11-11 60 views
2

我以爲我明白ngModule的工作方式,但顯然不是。我有3個模塊:AppModuleAmpedFormsModuleAmpedCommonModule(在下面)的問題是,當我嘗試導入AmpedFormsModuleAmpedCommonModule它給了我這個錯誤,並且控制檯日誌給我不確定:模塊導入的意外值'undefined'

預期的值'undefined'由模塊'AmpedCommonModule'導入

我已經嘗試了很多與玩進口但沒有任何成功的事情。我也嘗試創建另一個模塊,並試圖導入Common或Form模塊的模塊有相同的問題。任何正確的方向點非常感謝!

app.module.ts

import { NgModule }  from '@angular/core'; 
import { HttpModule }  from '@angular/http'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { RouterModule } from '@angular/router'; 

import { ModalModule } from 'angular2-modal'; 
import { BootstrapModalModule } from 'angular2-modal/plugins/bootstrap'; 

import { AppComponent } from './app.component'; 
import { HomepageComponent } from './app.homepage'; 

import { AmpedFormsModule }  from './amped/forms/amped.forms.module'; 
import { AmpedCommonModule }  from './amped/common/amped.common.module'; 


import { routes, 
    appRoutingProviders } from './app.routes'; 

import 
    { LocationStrategy, HashLocationStrategy} from '@angular/common'; 


@NgModule({ 
    imports:  [ 
    BrowserModule, 
    AmpedFormsModule, 
    AmpedCommonModule, 
    HttpModule, 
    ModalModule.forRoot(), 
    BootstrapModalModule, 
    routes 
    ], 
    declarations: [ AppComponent, HomepageComponent ], 
    providers : [appRoutingProviders, {provide: LocationStrategy, useClass: HashLocationStrategy}], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule { } 

./amped/forms/amped.forms.module

import { NgModule }   from '@angular/core'; 
import { CommonModule }  from '@angular/common'; 
import { HttpModule }   from '@angular/http'; 
import { 
    FormsModule, 
    ReactiveFormsModule }  from '@angular/forms'; 

// ... imports 

import { AmpedCommonModule } from '../common/amped.common.module'; 


@NgModule({ 
    imports   : [ CommonModule, FormsModule, ReactiveFormsModule, HttpModule, AmpedCommonModule ], 
    declarations : [ ... declarations ], 
    exports   : [ ... exports ], 
    providers  : [ ... services ], 
    entryComponents : [ ] 
}) 
export class AmpedFormsModule {} 

./amped/common/amped.common.module

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule } from '@angular/forms'; 

// ... imports 

import { AmpedFormsModule } from '../forms/amped.forms.module'; 

console.log('CRUUD', AmpedFormsModule); 

@NgModule({ 
    imports  : [BrowserModule, FormsModule, AmpedFormsModule], 
    declarations : [ ... declarations ], 
    exports   : [ ... exports ], 
    providers  : [ ], 
}) 
export class AmpedCommonModule { }

app.routes.ts

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

import { HomepageComponent } from './app.homepage'; 

import { crudRoutes } from './amped/forms/amped.forms.routes'; 

export const appRoutes: Routes = [ 
    ...crudRoutes, 
    { path: '', component: HomepageComponent, pathMatch: 'full' }, 
]; 

export const appRoutingProviders: any[] = []; 

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

./amped/forms/amped.forms.routes

export const crudRoutes: Routes = [ 
    { path: 'edit/:model', component: AmpedCrudTableComponent }, 
    { path: 'edit/:model/:id', component: AmpedCrudFormComponent } 
];
+0

我的猜測是循環依賴與模塊導致它失敗。可能需要進行一些重組 –

+0

您將如何構建進口?我的想法是,每個模塊都會導入所需的內容? – locrizak

+0

是的,但循環依賴是一個問題。你需要花一些時間考慮如何在不引起這種循環依賴的情況下完成這項工作。如果你有來自不同模塊的組件相互依賴,也許這是一個標誌,他們應該是同一個模塊的一部分 –

回答

5

很難說確切的問題,但也有一些建議,

1) change BroswerModule to CommonModule in AppCommonModule。請記住BroswerModule應該是我僅由AppModuleRootModule導入。

2)不知道,但看來你是通過導入模塊進入對方創建循環依賴但也說不太清楚,但。

@NgModule({ 
    imports  : [FormsModule, AmpedFormsModule],  //<<< here 
}) 

@NgModule({ 
    imports  : [ HttpModule, AmpedCommonModule ], //<<< here 
    ... 
}) 

3)如果AmpedFormsModuleAmpedCommonModule懶惰模塊不忘記把默認的關鍵字class關鍵字

eg. export default class AmpedFormsModule {} 
+1

我明白你的意思了。我有這兩個模塊試圖做太多,太聰明瞭。重構了一下,得到一個組件沒有找到錯誤,但比以前更好。感謝您的提示! – locrizak

相關問題