当前位置: 首页 > news >正文

Angular 依赖注入

Angular 依赖注入

  • Angular为什么会有依赖注入
  • Angular依赖注入
    • 提供依赖项
    • 注入依赖项
    • 多级注入器
    • 解析规则
  • 总结

Angular为什么会有依赖注入

  • Angular.js 起初是为了解决谷歌内部复杂中大型的前端应用,同时是一批 Java 程序员打造的,所以首次在前端中大胆引入了依赖注入,那么 Angular 是基于 Angular.js 打造的新一代前端框架,所以延续了依赖注入特性,并改善了层级注入器,同时采用了更优雅的装饰器 API 形式

  • Angular 的服务 + 依赖注入完美解决了数据共享和逻辑复用问题,服务本质上和 React Hooks 没有太多的区别,只是 API 形态不一样,一个是通过函数形式一个是通过类+依赖注入,因为这两个框架的底层机制和思想不一样,导致了 API 表现形式的不同,但是最终都是在解决数据共享和逻辑复用的问题。

Angular依赖注入

提供依赖项

  • @[Injectable](https://angular.cn/api/core/Injectable) 装饰器以表明此类可以被注入
  • 在组件级别,使用 @[Component](https://angular.cn/api/core/Component) 装饰器的 providers 字段
  • 在 NgModule 级别,要使用 @[NgModule](https://angular.cn/api/core/NgModule) 装饰器的 providers 字段
  • 在应用程序根级别,允许将其注入应用程序中的其他类。这可以通过将 providedIn: 'root' 字段添加到 @[Injectable](https://angular.cn/api/core/Injectable) 装饰器来实现

摇树优化

注入依赖项

检查注入器中是否有该服务的实例,如果没有注入器就会使用注册的提供者创建一个,并将其添加到注入器中。

在这里插入图片描述

多级注入器

使用 Angular 构建的应用程序可能会变得非常大,管理这种复杂性的方法之一是将应用程序拆分为许多封装良好的小模块,这些模块本身也会拆分为定义明确的组件树。

注入器层次结构的类型

  • ModuleInjector 层次结构
    • 使用 @[Injectable](https://angular.cn/api/core/Injectable)()providedIn 属性优于 @[NgModule](https://angular.cn/api/core/NgModule)()providers 数组。使用 @[Injectable](https://angular.cn/api/core/Injectable)()providedIn 时,优化工具可以进行摇树优化,从而删除你的应用程序中未使用的服务,以减小包尺寸。

    • providedIn: 'root'

      在这里插入图片描述

      • Services are singleton for the whole application, also for lazy loaded modules(eagerly-loaded modules)
      • No need to explicitly register the service with a NgModule
    • providedIn: 'platform'

      在这里插入图片描述

    • providedIn: 'any' // DEPRECATED since Angular v15

      在这里插入图片描述

    • providedIn: MyModule // DEPRECATED since Angular v15

    • providedIn: MyComponent // DEPRECATED since Angular v15

  • ElementInjector 层次结构
    • Angular 会为每个 DOM 元素隐式创建 ElementInjector
    • @[Directive](https://angular.cn/api/core/Directive)()@[Component](https://angular.cn/api/core/Component)()

解析规则

在这里插入图片描述

解析修饰符

  • 如果 Angular 找不到你要的东西该怎么办,用 @[Optional](https://angular.cn/api/core/Optional)()
  • 从哪里开始寻找,用 @[SkipSelf](https://angular.cn/api/core/SkipSelf)()
  • 到哪里停止寻找,用 @[Host](https://angular.cn/api/core/Host)()@[Self](https://angular.cn/api/core/Self)()

总结

Angular依赖注入

  • 提供依赖项
  • 注入依赖项
  • 多级注入器
  • 解析规则
http://www.dtcms.com/a/302852.html

相关文章:

  • 网络 编程
  • 洛谷刷题7.28
  • 基于AFLFast的fuzz自动化漏洞挖掘(1)
  • 【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案
  • 【React Context API 优化与性能实践指南】
  • DBAPI 实现分页查询的两种方法
  • 阿里云Ubuntu 22.04 ssh隔一段时间自动断开的解决方法
  • 【力扣热题100】哈希——两数之和
  • 【mysql】—— mysql中的timestamp 和 datetime(6) 有什么区别,为什么有的地方不建议使用timestamp
  • 智能制造,从工厂建模,工艺建模,柔性制造,精益制造,生产管控,库存,质量等多方面讲述智能制造的落地方案。
  • 破解PCB制造痛点,盘古信息IMS MOM 铸就数字化标杆工厂
  • PL/SQL
  • 开疆智能ModbusRTU转Profinet网关连接西门子CP341配置案例
  • DDD之整体设计流程(2)
  • debian系统分卷是不会影响系统启动速度?
  • 排序算法 (Sorting Algorithms)-Python示例
  • Android 系统架构
  • 阿里云 API 网关 x OKG:游戏连接治理的「最后一公里」
  • 阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件
  • 电脑不小心误删了文件怎么恢复??
  • AI资讯日报 - 2025年07月28日
  • EXCEL批量生成超链接引用无效的情况
  • Kotlin中Flow
  • 基于Spring Boot的装饰工程管理系统(源码+论文)
  • 一个典型的微控制器MCU包含哪些模块?
  • kafka开启Kerberos使用方式
  • “本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”解决方式
  • 算法训练营day34 动态规划② 62.不同路径、63. 不同路径 II、343整数拆分、96.不同的二叉搜索树
  • Kafka 顺序消费实现与优化策略
  • linux diff命令使用教程