【问题标题】:how to use sharedModule in angular2?如何在angular2中使用sharedModule?
【发布时间】:2016-09-22 05:28:42
【问题描述】:

我有一个 angular2 组件,我想在多个模块之间共享。

所以我在 sharedModule 下面写了,

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {GenericComponent} from './generic/generic.component';
@NgModule({
  imports:      [ BrowserModule ],
  declarations: [ GenericComponent ],
  exports:      [ GenericComponent ]
})
export class SharedModule { }

然后我将此 sharedModule 添加到多个模块中,如下所示:

app.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {SharedModule} from './shared.module';
import { AppComponent } from './app.component';
@NgModule({
  imports:      [ BrowserModule,SharedModule ],
  declarations: [ AppComponent ],
  exports:      [ AppComponent ],
  bootstrap: [AppComponent]
})
export class AppModule { }

我也类似地将 sharedModule 添加到 generic.module.ts 中,

generic.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {SharedModule} from './shared.module';
@NgModule({
  imports:      [ BrowserModule,SharedModule ],
  declarations: [ //.. here I have added all the components that generic uses ]
})
export class GenericModule { }

但是当我尝试在 generic.module.ts 的组件中使用通用组件时出现以下错误

模块“GenericModule”导入的意外值“undefined”

【问题讨论】:

  • 我在任何地方都没有看到GenericModule.. 请添加它。
  • 您是否也将 GenericModule 导入 SharedModule 中?我在导致循环依赖失败之前发生过这种情况
  • @peeskillet no.. 我在 sharedModule 中导入 generic.component,我在 genericModule & AppModule 中导入这个共享模块
  • @peeskillet 其实我有这个问题。我的 sharedModule 包含一个管道和一个模块(A),模块 A 需要 ShareModule 的管道,所以我从模块 A 中导入它。但是我有一个错误Unexpected value 'undefined' imported by the module 'A'。在这种情况下我应该怎么做?

标签: angular typescript angular2-modules ng-modules


【解决方案1】:

这是我的应用程序中使用共享模块的代码:

应用模块:

import { AboutModule } from './about/about.module';
import { SharedModule }   from './shared/shared.module';
import { Menubar, MenuItem } from 'primeng/primeng';

@NgModule({
    imports: [ BrowserModule, RouterModule.forRoot(appRoutes), SharedModule.forRoot(), 
               HomeModule ],
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ],
    providers: [ appRoutingProviders ]

}) 

export class AppModule {} 

首页模块:

import { SharedModule }   from '../shared/shared.module';
import {routing} from './home.routing'


@NgModule({
    imports: [ SharedModule, routing],
    declarations: [ HomeComponent, LoginComponent, RegisterComponent, VerifyComponent, 
                   VerifyEmailComponent, ForgotComponent, ForgotVerifyComponent, 
                   ChangeComponent, ChallengeComponent, LogoutComponent ], 
    bootstrap: [ HomeComponent ],
    providers: [ ]

}) 

export class HomeModule {} 

还有共享模块:

@NgModule({
  imports: [CommonModule, RouterModule, MenubarModule, GalleriaModule, InputTextModule, PanelModule, ButtonModule,
            DropdownModule, DialogModule, AccordionModule, CalendarModule, SelectButtonModule, CheckboxModule,
            ProgressBarModule, DataTableModule],
  declarations: [ ErrorMessagesComponent, FoodDashboardComponent ],
  exports: [ CommonModule, ReactiveFormsModule, HttpModule, RouterModule,
            MenubarModule, GalleriaModule, InputTextModule, PanelModule, ButtonModule, DropdownModule, DialogModule, AccordionModule, CalendarModule,
            SelectButtonModule, CheckboxModule, DataTableModule, ProgressBarModule, ErrorMessagesComponent, FoodDashboardComponent ]
})

export class SharedModule {
  //
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [SettingsService, AppMenuService, AuthorizationService, LoginService, RegisterService, ThemeService, ValidationService,
        NutritionixService, AuthGuardService, CalculationService, ChallengeService ]
    };
  }
}

我的应用中有 20 多个模块,而且我在所有地方都使用共享模块。这工作得很好。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    您不能在 featureModule 中使用 BroswerModule。因此,请确保您使用 CommonModule 而不是 BrowswerModule。

    import { NgModule }      from '@angular/core';
    import { CommonModule }        from '@angular/common';
    import {SharedModule} from './shared.module';
    @NgModule({
      imports:      [ CommonModule ,SharedModule ],
      declarations: [ //.. here I have added all the components that generic uses ],
      exports:      [ CommonModule]
    })
    export class GenericModule { }
    

    【讨论】:

    • 仍然收到错误:nexpected value 'undefined' imported by the module 'GenericModule'
    • 我认为您正在导入的东西之一没有找到。通过一一删除来检查,以便您了解哪个导入给您错误
    • 我是否也应该将 GenericComponent 添加到 generic.module 中的声明中? @ranakrunal9
    • 但是你的目的不明确。它是一个惰性模块还是什么?我看不到任何连接赌注 GenericModule 和 AppModule。为什么到处都注入 sharedModule ?有很多问题要问。
    • 我也尝试在 generic.module 中导入 generic.component,还是不行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2016-12-12
    • 2018-01-21
    • 2016-12-05
    • 2016-11-26
    • 2017-05-07
    相关资源
    最近更新 更多