2016-11-11 48 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

相关问题