【问题标题】:Build Private Modules in Angular2在 Angular2 中构建私有模块
【发布时间】:2018-04-07 16:35:04
【问题描述】:

我尝试创建自己的模块并像下面的 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 服务提供者添加到整个应用程序中。

但我不清楚。

提前致谢。

【问题讨论】:

    标签: javascript angular


    【解决方案1】:

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

    这是其中的引述:

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

    重要的是要了解服务没有封装,因此您无需导入或导出它们。

    与上面的模块不同,我现在需要在我的 申请。

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

    AComponent 是公开的,因为它已导出

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

    AComponent 是私有的,因为它没有被导出

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-28
      • 2020-11-07
      • 1970-01-01
      • 2016-07-19
      • 2021-04-25
      • 2015-09-05
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多