• angular


    一、模块

    1、特性模块: 纯业务模块,一个顶级组件下挂很多子组件,大部分由declarations组成, 只导出顶出组件,若有服务的生命周期必须和模块相同。

    2、路由特性模块:顶级组件只用作导航使用(懒加载),不会导出任何东西,不会被任何模块导入

    3、路由模块

    4、服务模块,不应该有声明对象,只应该由根组件导入

    特性模块

    声明 declarations

    提供商 providers

    导出什么

    被谁导入

    领域

    罕见

    顶级组件

    特性模块,AppModule

    路由特性

    罕见

    路由

    是(守卫)

    RouterModule

    特性(供路由使用)

    服务

    AppModule

    窗口部件

    罕见

    特性

    entrycomponent入口组件,Angular 编译器只会为那些可以从 entryComponents 中直接或间接访问到的组件生成代码

    提供商就相当于说明书,用来指导 DI 系统该如何获取某个依赖的值。

    服务导入,优先是prividedin:"root"

    注入器树:平台root、ngModule、组件

    如果某个模块是惰性加载的,那么请使用 @NgModule() 的 provides 选项

    为什么 Angular 不能像主动加载模块那样把惰性加载模块的提供商也添加到应用程序的根注入器中呢?为什么会出现这种不一致?

    归根结底,这来自于 Angular 依赖注入系统的一个基本特征: 在注入器还没有被第一次使用之前,可以不断为其添加提供商。 一旦注入器已经创建和开始交付服务,它的提供商列表就被冻结了,不再接受新的提供商。

    ,应用逻辑开始惰性加载某个模块。 Angular 必须把这个惰性加载模块中的提供商添加到某个注入器中。 但是它无法将它们添加到应用的根注入器中,因为根注入器已经不再接受新的提供商了。 于是,Angular 在惰性加载模块的上下文中创建了一个新的子注入器。

    在NgModule配置Provider与在服务的ProviderIn配置,没有多少不同,服务的ProviderIn,主要的区别是如果 NgModule 没有用到该服务,那么它就是可以被摇树优化掉的。 对于某个提供特定服务的库而言,有些组件可能会希望注入器是可选的,等使用该库的应用程序来决定是否要提供该服务。

    NgModule,但以 providers 形式提供的服务无法被摇树优化。

    如果你在 AppModule 的 @NgModule() 元数据中配置了全应用级的提供商,它就会覆盖通过 @Injectable() 配置的那一个

    提供单例服务3种方式

  • 相关阅读:
    这次面试就差不多了,你有什么问题需要问我呢?
    C++为啥要使用new
    C#读取“我的文档”等特殊系统路径及环境变量
    C++11 Lambda表达汇总总结
    c#计算 坐标点与坐标点之间的距离
    eclipse svn同步资源库时忽略某些不需要提交文件类型和文件夹
    通俗理解TCP/IP协议三次握手四次分手流程
    mysql 免安装版 启动服务马上关闭
    MySQL数据库安装与配置详解
    word 插入的图片被嵌套在文字底下
  • 原文地址:https://www.cnblogs.com/cloudsu/p/12096029.html
Copyright © 2020-2023  润新知