当前位置: 首页 > 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.lryc.cn/news/602341.html

相关文章:

  • 谷歌浏览器深入用法全解析:解锁高效网络之旅
  • 图像处理第三篇:初级篇(续)—— 照明的理论知识
  • C++算法之单调栈
  • 达梦数据库获取每个数据库表的总条数及业务实战
  • 提取excel中的年月日
  • window显示驱动开发—Direct3D 11 视频播放改进
  • 你的连接不是专用连接
  • NI Ettus USRP X440 软件无线电
  • 28天0基础前端工程师完成Flask接口编写
  • Go 语言-->指针
  • Java-数构排序
  • WAIC看点:可交付AI登场,场景智能、专属知识将兑现下一代AI价值
  • vue怎么实现导入excel表功能
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的微商品牌规范化运营研究
  • IDEA 手动下载安装数据库驱动,IDEA无法下载数据库驱动问题解决方案,IDEA无法连接数据库解决方案(通用,Oracle为例)
  • idea启动java应用报错
  • 设计模式十二:门面模式 (FaçadePattern)
  • 结合项目阐述 设计模式:单例、工厂、观察者、代理
  • 记一次IDEA启动微服务卡住导致内存溢出问题
  • Java设计模式之<建造者模式>
  • idea编译报错 java: 非法字符: ‘\ufeff‘ 解决方案
  • 解决windows系统下 idea、CLion 控制台中文乱码问题
  • 机器学习sklearn:不纯度与决策树构建
  • Rust实战:AI与机器学习自动炒饭机器学习
  • Linux系统Centos7 安装mysql5.7教程 和mysql的简单指令
  • 搭建HAProxy高可用负载均衡系统
  • 【拓扑排序 缩点】P2272 [ZJOI2007] 最大半连通子图|省选-
  • Linux应用开发基础知识——LInux学习FreeType编程(七)
  • 【C++进阶】---- 二叉搜索树
  • 基于LangGraph Cli的智能数据分析助手