将组件、指令和管道公开并在模块外使用

Posted

技术标签:

【中文标题】将组件、指令和管道公开并在模块外使用【英文标题】:Make component, directive and pipe public and use outside a module 【发布时间】:2018-02-04 21:07:24 【问题描述】:

如何公开组件、指令和管道? 这是因为当我将它们添加到模块中的声明数组时,它们在声明它们的模块中的任何地方都可见并且是模块私有的。如果我必须在模块外使用应该怎么做。

【问题讨论】:

【参考方案1】:

您可以使用 shared Module 负责分享 common components, pipes and directives请注意使用sharedModule or coreModule 只是一个命名约定,但您可以使用任何其他模块名称eg xyzModule。重要的是确保在 export array

中声明常见的东西
import  NgModule             from '@angular/core';
import  CommonModule         from '@angular/common';

import  CustomComponent  from 'path';
import  CustomPipe       from 'path';
import  CustomDirective  from 'path';

@NgModule(
  imports:      [ CommonModule ],
  declarations: [ CustomComponent, CustomPipe, CustomDirective],
  exports:      [ CustomComponent, CustomPipe, CustomDirective]
)
export class SharedModule  

在应用程序/根模块或任何其他功能或像这样的延迟加载功能模块中使用它,

AppModule 或者说 ClientModule

import SharedModule  from 'path'

@NgModule(

   imports: [..., sharedModule]

)

【讨论】:

能否请您提一下相关项目应添加到导出数组中?此外,它不必是共享模块,我相信它可以来自任何模块的导出数组。请在您的答案中添加这些信息,以便我将其标记为答案。 是的,从逻辑上讲,您可以从any module eg. xyzModule 导出此类项目。但它是AngularTeam 给出的命名约定,所以我建议你使用sharedModule 并没有那么混乱。【参考方案2】:

只需要确保相关项目在您模块的导出行中

 exports:      [ CustomComponent, CustomPipe, CustomDirective]

然后实现该模块的任何其他模块都可以访问这些东西

【讨论】:

以上是关于将组件、指令和管道公开并在模块外使用的主要内容,如果未能解决你的问题,请参考以下文章

2020 -02- 07组件与模板

Angular 模块封装概念常见的错误理解

如何在组件外调用 GraphQL

模块

第1单元-管道和中间件简介

使用 Webpack 和 Typescript 将模块公开给全局 Window 对象