• 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种方式

  • 相关阅读:
    Java栈、堆、方法区
    Java冒泡算法
    JDK8 API下载
    java 对两个整数变量的值进行互换。三种方法
    Java中double相减精度的问题,和解决方法
    window.onload问题
    ES6中class详解
    YOLO V2
    YOLO V1
    ORB-SLAM2源码解析
  • 原文地址:https://www.cnblogs.com/cloudsu/p/12096029.html
Copyright © 2020-2023  润新知