在Angular2中构建私有模块

时间:2017-10-26 10:20:56

标签: javascript angular

我尝试创建自己的模块并将其导入,如下面的app模块中那样。

  

下面的代码很好,但我想展示一个例子然后   提出我的问题。

假设我的文件夹结构如下: - `

├── app
│   ├── app.component.ts
│   └── app.module.ts
├── credit-card
│   ├── credit-card-mask.pipe.ts
│   ├── credit-card.component.ts
│   ├── credit-card.module.ts
│   └── credit-card.service.ts
├── index.html
└── main.ts

`

我的信用卡模块如下:



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

import { CreditCardMaskPipe } from './credit-card-mask.pipe';
import { CreditCardService } from './credit-card.service';
import { CreditCardComponent } from './credit-card.component';

@NgModule({
  imports: [CommonModule],
  declarations: [
    CreditCardMaskPipe,
    CreditCardComponent
  ],
  providers: [CreditCardService],
  exports: [CreditCardComponent]
})
export class CreditCardModule {}




我的应用模块如下: -



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

import { CreditCardModule } from '../credit-card/credit-card.module';
import { AppComponent } from './app.component';

@NgModule({
  imports: [
    BrowserModule,
    CreditCardModule
  ],
  declarations: [AppComponent],
  bootstrap: [AppComponent]
})
export class AppModule { }




我试图通过互联网搜索在Angular2中创建私有模块但没有相关信息。

与上面的模块不同,我现在需要在我的应用程序中实现一个私有模块。

假设我希望我的信用卡模块是私有的,那么通过删除课前的导出词,CreditCardModule就足以使我的模块变为私有?

让我知道我是对还是错。或者还有其他任何方式,以便我的应用程序可以在angular2应用程序中拥有私有模块吗?

另外,我引用了页面https://angular.io/guide/ngmodule-faq

我不应该导出什么?

不要导出以下内容:

  • 仅在此模块中声明的组件中需要的专用组件,指令和管道。如果您不想让其他模块看到它,请不要将其导出。
  • 不可声明的对象,例如服务,功能,配置和实体模型。
  • 仅由路由器或引导动态加载的组件。永远不能在另一个组件的模板中选择这样的条目组件。虽然出口它们没有坏处,但也没有任何好处。
  • 没有公共(导出)声明的纯服务模块。例如,重新导出HttpModule没有意义,因为它不会导出任何东西。它的唯一目的是将http服务提供者作为一个整体添加到应用程序中。

但我不清楚。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我强烈建议您阅读这篇文章:

以下是它的引用:

  

Angular以某种方式介绍了模块封装的概念   类似于ES模块。它基本上意味着可以声明   类型 - 组件,指令和管道 - 只能用于   在此模块中声明的组件。

重要的是要理解的是,服务没有封装,因此您不能导入或导出它们。

  

与上面的模块不同,我现在需要在我的模块中实现一个私有模块   应用

没有私人模块这样的东西。但是,如上所述,您可以通过简单地不导出它来使声明类型对该模块是私有的。例如:

AComponent已公开,因为它已导出

@NgModule({
  ...
  declarations: [AComponent],
  exports: [AComponent]           
})
export class AModule { }

AComponent是私有的,因为它未导出

@NgModule({
  ...
  declarations: [AComponent]         
})
export class AModule { }