angular 依赖注入是angular的核心思想

StaticProvider 和 Injector 通过Injector.create将StaticProvider转化为Injector

create(options: {providers: StaticProvider[], parent?: Injector, name?: string}): Injector
复制代码

PlatformRef是什么?

平台实例描述,createPlatform和createPlatformFactory工厂创建生成,也可以理解成提供特定依赖注入项目的集合

  • createPlatform

通过传入Injector创建PlatformRef

createPlatform(injector: Injector): PlatformRef
复制代码
  • createPlatformFactory

通过StaticProvider创建PlatformRef,内部调用createPlatform创建PlatformRef

createPlatformFactory(parentPlatformFactory: ((extraProviders?: StaticProvider[]) => PlatformRef) | null,name: string, providers: StaticProvider[] = []
): (extraProviders?: StaticProvider[]) => PlatformRef
复制代码

PlatformRef启动后生成NgModuleRef

export class PlatformRef {// 通过NgModuleFactory启动,aotbootstrapModuleFactory<M>(moduleFactory: NgModuleFactory<M>,options?: BootstrapOptions): Promise<NgModuleRef<M>>;// 通过NgModule启动,jitbootstrapModule<M>(moduleType: Type<M>,compilerOptions: (CompilerOptions & BootstrapOptions) |Array<CompilerOptions & BootstrapOptions> = []): Promise<NgModuleRef<M>>
}
复制代码

NgModuleRef

ngModule实例,可以由NgModuleFactory.create生成,可以理解为局部/模块内依赖注入项目集合,NgModule的存在一定程度上解决Injector的配置使用问题。直接引用其他NgModule就能拿到此NgModule所注册的Injector。

ComponentFactoryResolver

组件工厂提供者,由NgModuleRef注入,ComponentFactoryResolver.resolveComponentFactory生成ComponentFactory

ComponentFactory

组件工厂,ComponentFactory.create创建ComponentRef

create(injector: Injector, projectableNodes?: any[][], rootSelectorOrNode?: string|any,ngModule?: NgModuleRef<any>
): ComponentRef<C>;
复制代码
  • ComponentFactory_:ComponentFactory的实现

ComponentRef

组件实例描述,ComponentRef.hostView获取ViewRef,ComponentRef.changeDetectorRef获取ChangeDetectorRef

  • ComponentRef_: ComponentRef的实现

ViewRef 和 ChangeDetectorRef

ViewRef:视图实例描述, ChangeDetectorRef:变化检测实例描述,用于控制变化检测

angular学习小结相关推荐

  1. 原生小程序学习小结,mpvue+mpvue-weui+fyl.js小程序项目搭建笔记

    官方文档:https://developers.weixin.qq.... 学习小结: 1.小程序.订阅号及服务号都是在微信公众平台的体系下,但小程序本身与订阅号及服务号是完全独立的,需要重新注册: ...

  2. Python - 输出格式 (学习小结)

    Python - 输出格式 (学习小结) Bu.xing 利用现代手段,创建学习家园 ​关注他 1 人赞同了该文章 Python 输出格式 我们常说的输出格式分两种含义: # 一种是指数据在屏幕上的显 ...

  3. Page 的生命周期学习小结

    (以前我在 csdn 写的翻译文章,现在转到这里来.) Page 的生命周期学习小结 原文链接:Page Events: Order and PostBack 作者:Paul Wilson 翻译:木野 ...

  4. c语言基本类型学习小结

    基本类型学习小结 环境: Dev-C++ 4.9.6.0 (gcc/mingw32), 使用-Wall编译选项 基本类型包括字节型(char).整型(int)和浮点型(float/double). 定 ...

  5. python中字典和集合的区别_Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...

  6. 【转载】Hyperledger学习小结

    Hyperledger学习小结 自学Hyperledger Composer也有段时间了,是时候对所学的知识总结一下了.因为没有实际项目参与的话,差不多也就到此为止了.后续可能会去了解一下以太坊的技术 ...

  7. 图片裁剪功能学习小结

    图片裁剪功能学习小结 近期有需要使用图片裁剪的功能,在使用插件和自己写裁剪组件之间犹豫了很久,后来根据需求经过反复的考虑,还是自己封装吧,毕竟自己动手,丰衣足食,对吧?嗯,??????是的!最后生成裁 ...

  8. pthread多线程编程的学习小结

    pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 -- DevStore p ...

  9. ShaderLab学习小结(十九)RenderToCubemap创建能反射周围环境的效果

    继续用"ShaderLab学习小结(十八)cubemap"中所做的shader 想要让它能对周围的环境进行反射 思路就是要让它的cubemap里的内容是周围环境的映射 shader ...

最新文章

  1. 同时测试多个服务是否存活的脚本[shell和perl]
  2. IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)
  3. 内含下载 | Pokemon GO:20年前的IP为什么还能引爆朋友圈?
  4. Linux——查看硬件配置命令
  5. [转]Redis集群的配置
  6. 336. Palindrome Pairs 回文对
  7. 实现暂停一秒输出的效果_从暂停游戏联想到的
  8. CPU占用率是什么?
  9. linux树形看磁盘,2 - 3、Linux—磁盘分区和挂载【2021-3-3】
  10. 《嵌入式系统项目分析入门与实践》 读后感(1)
  11. 基于opencv利用霍夫变换实现圆形物体的检测
  12. 点菜单项在面板中打开并判断是否打开
  13. AJax视频教程适高级篇+源码(2G)25讲
  14. 信创环境下密码强度规则:设置密码长度为6至20位,包含大、小写字母、数字、特殊字符组合
  15. matlab字号单位是磅吗,Office软件中字体“号”与“磅”的关系
  16. 素数五个为一行的_帕斯卡三角形与素数
  17. Java项目:小区物业管理系统(java+Springboot+ssm+mysql+maven+jsp)
  18. 手机回收ATM面世,无人回收会成为下一个风口吗?
  19. 安卓Activity的生命周期函数详解
  20. Linux双网卡绑定bond0(单IP)

热门文章

  1. Android考勤日历控件
  2. 浪潮信息以新型云基础设施赋能新能源行业 助力行业发现新动能
  3. 创维显示屏幕配啥图像服务器好,创维显示器和aoc显示器哪个好
  4. 网易云直播 —— 会议系统开发前言
  5. 弘辽科技:淘宝店铺什么是B类违规?B类违规扣多少分?
  6. 熟悉mysql基本数据库操作系统_数据库系统原理(第四章:SQL与关系数据库基本操作 )...
  7. 唤醒数据价值,惟客数据打造客户经营数字化闭环 | 爱分析调研
  8. 中英文说明书丨艾美捷CD8α体内抗体相关研究方案
  9. OpenCV 保边滤波器 各向异性扩散滤波(Anisotropic Filter)
  10. 苹果 android专利,苹果新专利:类似Android但更复杂的图形解锁