使模块在 Angular 应用程序中全局可用

Make Module global available in Angular application

我有以下模块,我在其他模块上使用了哪些组件:

import { NgModule } from '@angular/core';

import { CommonModule } from '@angular/common';  
import { ClickOutsideModule } from "ng-click-outside";

import { PopupComponent} from './popup.component';

@NgModule({  
  declarations: [
    PopupComponent
  ],      
  imports: [
    CommonModule,
    ClickOutsideModule
  ],  
  exports: [
    PopupComponent
  ],
  providers: []
})

export class PopupModule {}

我有我的 AppModule:

import { NgModule } from '@angular/core';

import { AppBrowserModule } from './app-browser.module';
import { AppRoutingModule } from './app-routing.module';

import { HomeModule } from './home/home.module';

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

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    AppBrowserModule,  
    HomeModule,
    AppRoutingModule
  ],
  exports: [],
  bootstrap: [ AppComponent ]
})

export class AppModule { }
  1. 是否可以在App的所有模块中都使用ClickOutsideModule,比如PopupModule,而不需要在每个模块中都导入ClickOutsideModule?

    或者我是否总是需要在它使用它的每个模块中导入它?

  2. AppModule 中的 Exports 有什么用?

只需创建一个 SharedModule,将 ClickOutsideModule 添加到它的 importsexports 数组中。像这样:

import { NgModule } from '@angular/core';
import { ClickOutsideModule } from "ng-click-outside";

@NgModule({ 
  imports: [
    ClickOutsideModule,
    ...
  ],  
  exports: [
    ClickOutsideModule,
    ...
  ],
})
export class SharedModule {}

然后在您想要访问 ClickOutsideModule 模块的任何地方导入 SharedModule。比如说,如果你想在 AppModule 中使用它,你可以这样做:

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

@NgModule({
  ...,
  imports: [
    SharedModule,
    ...
  ],
  ...
})

export class AppModule { }

您可以对 PopupModule 执行相同的操作:

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

@NgModule({
  ...,
  imports: [
    SharedModule,
    ...
  ],
  ...
})

export class PopupModule { }