【Angular 4】依赖注入
Angular算是将后端开发工程化引入前端的先驱之一,而Dependency injection依赖注入(后面简称为DI)又是Angular内部运作的核心功能,所以要深入理解Angular有必要先理解这一核心概念。
维基百科对依赖注入的解释?
在软件工程中,依赖注入是实现控制反转的一种软件设计模式,一个依赖是一个被其他对象(client)调用的对象(服务),注入则是将被依赖的对象(service)实例传递给依赖对象(client)的行为。将 被依赖的对象传给依赖者,而不需要依赖者自己去创建或查找所需对象是DI的基本原则。 依赖注入允许程序设计遵从依赖倒置原则(简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合) 调用者(client)只需知道服务的接口,具体服务的查找和创建由注入者(injector)负责处理并提供给client,这样就分离了服务和调用者的依赖,符合低耦合的程序设计原则。
依赖注入中的角色?
从维基百科解释可知, DI中包含三个角色,调用者(client), 服务(service)和注入者 (injector),下面开始介绍本文的主题 Angular的依赖注入。
为什么要使用依赖注入❓
我们用官网的一个小例子了解一下?
export class Car {public engine: Engine;public tires: Tires;public description = 'No DI';constructor() {this.engine = new Engine();this.tires = new Tires();}// Method using the engine and tiresdrive() {return `${this.description} car with ` +`${this.engine.cylinders} cylinders and ${this.tires.make} tires.`;}
}
我们可以看到一个Car类依赖于Engine和Tires这两个类,我们在Car的构造函数中去实例这两个依赖类。这有什么问题?如果有一天我们的Tires构造函数需要一个参数,那么我们必须要在Car的构造函数中去更改代码。
constructor() {this.engine = new Engine();this.tires = new Tires(params);}
]
这种代码是非常不灵活的。虽然我们可以进行如下结构调整
export class Car {public engine: Engine;public tires: Tires;public description = 'No DI';constructor(engine, tires) {this.engine = engine;this.tires = tires;}// Method using the engine and tiresdrive() {return `${this.description} car with ` +`${this.engine.cylinders} cylinders and ${this.tires.make} tires.`;}
}const car = new Car(new Engine(), new Tires())
这样似乎解决了不灵活的问题,但是如果依赖项很多的话,我们都要去手动创建这些实例,也不太方便。其实创建依赖实例的过程完全可以交给一个专门的’工厂’来做,这就是angular里面的Injector。
使用实例请参考:Angular4学习之依赖注入
我有话说?
书读百遍,其意自现。虽然现在还不是很明白,但是实践起来,应该就会懂了。
【Angular 4】依赖注入相关推荐
- Angular 4 依赖注入教程之一 依赖注入简介
目录 Angular 4 依赖注入教程之一 依赖注入简介 Angular 4 依赖注入教程之二 组件服务注入 Angular 4 依赖注入教程之三 ClassProvider的使用 Angular 4 ...
- Angular 通过依赖注入机制注入一个对象的例子,什么是 ElementInjector
假设我在app.config.ts里定义了一个interface AppConfig和一个对象HERO_DI_CONFIG, 我想将后者注入到一个类的构造函数里去: export interface ...
- Angular Service依赖注入的一个具体例子
Angular service 相当于 SAP Commerce Cloud 里的 service facade. 使用如下的命令行创建Angular service: ng generate ser ...
- Angular 依赖注入
问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...
- 我的angularjs源码学习之旅2——依赖注入
依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...
- angularjs中的依赖注入
这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [ angula ...
- Angular 中的依赖注入link
Angular 中的依赖注入link 依赖注入(DI)是一种重要的应用设计模式. Angular 有自己的 DI 框架,在设计应用时常会用到它,以提升它们的开发效率和模块化程度. 依赖,是当类需要执行 ...
- Angular 依赖注入学习笔记之工厂函数的用法
网址:https://angular.institute/di We can transfer any data through our apps, transform it and replace ...
- Angular 依赖注入的学习笔记
Angular官方文档 Specifying a provider token If you specify the service class as the provider token, the ...
最新文章
- Serverless 工程实践|自建 Apache OpenWhisk 平台
- UNITY 复制对象后局部坐标和世界坐标的变化问题
- .net core连接MongoDB
- P5437-[XR-2]约定【拉格朗日差值,数学期望】
- 全国职业院校技能大赛软件测试题目,我院荣获2017年全国职业院校技能大赛软件测试赛项一等奖...
- 我xp电脑桌面没有计算机图标不见了,xp系统我的电脑图标不见了怎么办|如何找回我的电脑图标-系统城...
- 别再跟我提Excel了!这才是阿里大厂都在用的数据分析神器
- P1019 单词接龙
- Electron 使用Widevine CDM插件
- 马哥Linux学习笔记2-3Linux命令帮助的获取详解
- ubuntu 16.04 配置网络代理
- DNS是什么?DNS什么用?
- 浏览器兼容与前端性能优化集合
- 1189 SEARCH
- SkinSharp(Skin#)软件换肤库!
- 整数转成RGB颜色值
- 金融科技大数据产品推荐:金融魔方 ---专业的金融SaaS服务平台
- 物体跟随鼠标移动——图片为gif格式
- ThinkCMF图片上传
- Android json数据解析