NgModule imports定义的运行时数据结构
源代码:
import {StoreModule} from '@ngrx/store';
import {reducers} from './reducer';
import { NgModule } from '@angular/core';
import { CounterComponent } from './container/component/counter/counter.component';
import { CommonModule } from '@angular/common';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import { BookManageComponent } from './container/component/bookmanage/book-manage.component';
import { SearchInputComponent } from './searchbookcomponents/search-input/search-input.component';
import { BookListComponent } from './searchbookcomponents/book-list/book-list.component';import { BookDetailComponent} from './searchbookcomponents/book-detail/book-detail.component';import {NgZorroAntdModule} from 'ng-zorro-antd';
import { BookManageService } from './service/book-manage.service';
import { EffectsModule } from '@ngrx/effects';
import { BookManageEffects } from './effects/book-manager.effect';@NgModule({imports: [CommonModule,NgZorroAntdModule,FormsModule,ReactiveFormsModule,StoreModule.forFeature('example', reducers), // 这个才是关键哦,EffectsModule.forFeature([BookManageEffects])],declarations: [CounterComponent, BookManageComponent,SearchInputComponent, BookListComponent, BookDetailComponent],exports: [CounterComponent, BookManageComponent, BookListComponent, BookDetailComponent],providers: [BookManageService]
})
export class ExampleModule { }
core.js里找到this.injectorDefTypes:
展开[[Entries]]:
找到ExampleModule下的imports区域:
应用程序代码中定义的代码:
StoreModule.forFeature('example', reducers)
这个方法实际上返回了一个module StoreFeatureModule,在运行时能够看到:
应用程序编写的reducer也会出现在这里:
多层级注入器 ModuleInjector 与 ElementInjector
这部分阐述来自这篇知乎文章详解 Angular 依赖注入
- ModuleInjector:通过 @NgModule() 或者 @Injectable() 配置
- ElementInjector:通过 @Directive() 或 @Component() 中的 providers 属性中配置
ModuleInjector
- Injectable() 的 providedIn 属性是要高于@NgModule() 的 providers 数组
- 当使用 Injectable() 的 providedIn 属性时,优化工具可以做 tree-shaking,比如 providedIn: ‘root’
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
NgModule imports定义的运行时数据结构相关推荐
- C专家编程 第6章 运动的诗章:运行时数据结构 6.1 a.out及其传说
运动的诗章:运行时数据结构 编程语言理论的经典对立之一就是代码和数据的区别.有些语言(如Lisp)把二者视为一体.其他语言(如C语言)通常维持两者的区别.Internet蠕虫非常难以被人们所 ...
- C专家编程-Chapter6 运行时数据结构(转)
a.out是链接器的输出. a.out is a file format used in older versions of Unix-like computer operating systems ...
- C语言运行时数据结构
段(Segment): 对象文件/可执行文件: SVr4 UNIX上被称为ELF(起初"Extensible Linker Format", 现在"Executable ...
- C专家编程--读书笔记六 运行时数据结构
第六章 一.知识点 1.代码和数据的区别也可以认为是编译时和运行时的分界线.编译器的绝大部分工作都跟翻译代码有关:必要的数据存储管理的绝大部分都在运行时进行.(P121) 2."a.out& ...
- C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么
操作系统在a.out文件里干了些什么 为什么a.out要以段的形式组织.段可以方便地映射到链接器在运行时可以直接载入的对象中!载入器只是取文件中的每个段的映像,并直接将它们放入到内存中.从本 ...
- Angular jasmine单元测试框架spec的运行时数据结构
以我单元测试里这段代码为例: 通过describe函数创建一个suite,即spec的集合: 真正的spec由函数it创建:其中expectable是human readable的字符串描述信息,描述 ...
- 运行时常量池在哪里_Java虚拟机详解(二)------运行时内存结构
首先通过一张图了解 Java程序的执行流程: 我们编写好的Java源代码程序,通过Java编译器javac编译成Java虚拟机识别的class文件(字节码文件),然后由 JVM 中的类加载器加载编译生 ...
- Java内存管理:Java内存区域 JVM运行时数据区
Java内存管理:Java内存区域 JVM运行时数据区 在前面的一些文章了解到javac编译的大体过程.Class文件结构.以及JVM字节码指令. 下面我们详细了解Java内存区域:先说明JVM规范定 ...
- 最全的 JVM 面试知识点(一):运行时数据区
转自: https://blog.csdn.net/keets1992/article/details/92089754 不是码农,不会敲代码的她,却最懂程序员!| 人物志: https://blog ...
最新文章
- MyBatis 中的 set 元素用法(MyBatis 3.1.1)
- Cocos2d-x项目移植到WP8系列之二:开篇
- android textview图标左侧,Android 自定义 TextView drawableTop 图标与文字左对齐(效果图)...
- 做好过程质量保证QA工作的几个关键方面
- 【6 插值方法】实例实战篇
- 2021暑假实习-SSM超市积分管理系统-day09笔记
- linux-组管理-添加组-删除组
- cesium获取模型实时坐标_Cesium 顶点着色器中解算模型坐标
- kuka的备选安装包有什么功能_机械臂的软浮动功能
- IOS程序之发送短信代码实现
- C#实现SQL SERVER2008聚合函数
- Linux开机启动流程详细步骤是什么?
- matlab中fix函数是啥,fix函数(函数fix是什么意思)
- 使用MD5加密的登陆demo
- 2026年预标准5G营收将达到2000亿美元
- Vue、VueCLI(脚手架)安装、使用详细步骤
- 图解 K8S(06):调度利器之污点与容忍度(压力驱逐)
- safari下载中文文件名乱码
- 常用计算机设备教案,计算机基础教案
- OpenJudge 6043 哆啦A梦的时光机——又短又快的双向广搜