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

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

Angular 以类似于 ES 模块的方式引入了模块封装的概念。 它基本上意味着可声明的类型——组件、指令和管道——只能由在该模块内声明的组件使用。 例如,如果我尝试使用下面的代码在 App 模块的 App 组件内使用 A 模块中的 a-comp

@Component({
  selector: 'my-app',
  template: `
      <h1>Hello {{name}}</h1>
      <a-comp></a-comp>
  `
})
export class AppComponent { }

会收到这个错误消息:


Template parse errors: ‘a-comp’ is not a known element


这是因为 App 模块中没有声明 a-comp。 如果我想使用这个组件,我需要导入定义这个组件的模块。解决方案如下:


@NgModule({
  imports: [..., AModule]
})
export class AppModule { }




这就是封装发挥作用的地方:A 模块必须通过将 a-comp 添加到 exports 数组来将其声明为在其他 module 内可用:

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



大多数 Angular 新手认为 Providers 也有封装,这种想法是错误的。可以在应用程序内的任何位置访问在任何非延迟加载模块中声明的 Providers.


Modules hierarchy

关于 imported modules 的最大困惑是开发人员认为这些被导入的 Modules 在应用运行时维护了一种层次结构,并且假设导入其他模块的模块成为被导入模块的父模块。


然而,事实并非如此。所有模块在编译阶段合并。因此,导入的模块和导入的模块之间没有层次关系。


所需命名空间之一被定义为默认命名空间。 此命名空间的控制标记不需要前缀。


<View> 标签是必需的,在上面的示例中,核心命名空间在第一行定义。 当然开发人员可以定义任何名称。 例如,为了使标签名称更短,还可以使用 c 而不是 core.



相关文章
|
JavaScript API
什么是 Angular Composable 概念
什么是 Angular Composable 概念
|
JavaScript 前端开发
关于 Angular 编程中的 shim 概念
关于 Angular 编程中的 shim 概念
|
6月前
|
前端开发 JavaScript
JavaScript 前端框架相关: React、Vue或Angular中组件化的概念是什么?
JavaScript 前端框架相关: React、Vue或Angular中组件化的概念是什么?
104 3
|
4月前
|
前端开发 容器
前端框架与库 - Angular模块与依赖注入
【7月更文挑战第17天】探索Angular的模块化和依赖注入:模块用于组织组件、服务等,通过`@NgModule`声明。依赖注入简化类间依赖管理,但面临模块重复导入、服务作用域不当和依赖循环等问题。解决策略包括规划模块结构、正确设置服务作用域和使用工厂函数打破循环依赖。遵循最佳实践,构建高效、可维护的Angular应用。
63 17
|
12月前
|
设计模式
Angular 依赖注入领域里 optional constructor parameters 的概念介绍
Angular 依赖注入领域里 optional constructor parameters 的概念介绍
|
存储 JavaScript 前端开发
通过单步调试的方式学习 Angular 中 TView 和 LView 的概念
通过单步调试的方式学习 Angular 中 TView 和 LView 的概念
Angular 应用懒加载模块中的配置管理
Angular 应用懒加载模块中的配置管理
|
开发框架 前端开发 UED
Angular 中懒加载模块初始化技术详解
Angular 中懒加载模块初始化技术详解
|
设计模式 JavaScript 前端开发
Angular 懒加载模块与 Combined Injector
Angular 懒加载模块与 Combined Injector
|
开发框架 前端开发 UED
初始化 Angular 懒加载模块:使用MODULE_INITIALIZER的高级技巧
初始化 Angular 懒加载模块:使用MODULE_INITIALIZER的高级技巧