Angular 4依赖注入学习教程之简介(一)


Posted in Javascript onJune 04, 2017

学习目录

  • Angular 4 依赖注入教程之一 依赖注入简介
  • Angular 4 依赖注入教程之二 组件服务注入
  • Angular 4 依赖注入教程之三 ClassProvider的使用
  • Angular 4 依赖注入教程之四 FactoryProvider的使用
  • Angular 4 依赖注入教程之五 FactoryProvider配置依赖对象
  • Angular 4 依赖注入教程之六 Injectable 装饰器
  • Angular 4 依赖注入教程之七 ValueProvider的使用
  • Angular 4 依赖注入教程之八 InjectToken的使用

本文主要给大家介绍的是关于Angular 4 依赖注入简介的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

本系列教程的开发环境及开发语言:

  • Angular 4 +
  • Angular CLI
  • TypeScript

基础知识

Angular CLI 基本使用

1、安装 Angular CLI (可选)

npm install -g @angular/cli

2、创建新的项目

ng new PROJECT-NAME

3、启动本地服务器

cd PROJECT-NAME
ng serve

依赖注入简介

在介绍依赖注入的概念和作用前,我们先来看个例子。各位看官请睁大眼睛,我要开始 "闭门造车" 了。

示例说明

一辆车内部构造很复杂,出于简单考虑,我们就只考虑三个部分:车身、车门和引擎。接下来我们来定义各个部分。

1.定义车身类

export default class Body { }

2.定义车门类

export default class Doors { }

3.定义车引擎类

export default class Engine {
 start() {
 console.log('?开动鸟~~~');
 }
}

4.定义汽车类

import Engine from './engine';
import Doors from './doors';
import Body from './body';

export default class Car {
 engine: Engine;
 doors: Doors;
 body: Body;

 constructor() {
 this.engine = new Engine();
 this.body = new Body();
 this.doors = new Doors();
 }

 run() {
 this.engine.start();
 }
}

一切已准备就绪,我们马上来造一辆车:

let car = new Car(); // 造辆新车
car.run(); // 开车上路咯

车已经可以成功上路,但却存在以下问题:

  • 问题一:在创建新车的时候,你没有选择,假设你想更换汽车引擎的话,按照目前的方案,是实现不了的。
  • 问题二:在汽车类内部,你需要在构造函数中手动去创建各个部件。

为了解决第一个问题,提供更灵活的方案,我们可以重构一下已定义的汽车类,具体如下:

export default class Car {
 engine: Engine;
 doors: Doors;
 body: Body;

 constructor(engine, body, doors) {
 this.engine = engine;
 this.body = body;
 this.doors = doors;
 }

 run() {
 this.engine.start();
 }
}

重构完汽车类,我们来重新造辆新车:

let engine = new NewEngine();
let body = new Body();
let doors = new Doors();
this.car = new Car(engine, body, doors);
this.car.run();

此时我们已经解决了上面提到的第一个问题,要解决第二个问题我们要先介绍一下依赖注入的概念。

依赖注入的概念

在软件工程中,依赖注入是种实现控制反转用于解决依赖性设计模式。一个依赖关系指的是可被利用的一种对象(即服务提供端) 。依赖注入是将所依赖的传递给将使用的从属对象(即客户端)。该服务是将会变成客户端的状态的一部分。 传递服务给客户端,而非允许客户端来建立或寻找服务,是本设计模式的基本要求。 —— 维基百科

看完概念是不是已经晕了,其实我们只要记住依赖注入的三种角色:使用者、服务(依赖对象)及注入器(Injector)。接下来我们马上来看一下 Angular 中依赖注入的应用。

Angular 依赖注入的应用

更新后的汽车类

@Injectable()
export default class Car {
 constructor(
 private engine: Engine, 
 private body: Body, 
 private doors: Doors) {}
 
 run() {
 this.engine.start();
 }
};

具体应用

import { ReflectiveInjector } from '@angular/core';

let injector = ReflectiveInjector.resolveAndCreate([Car, 
 Engine, Doors, Body]);
let car = injector.get(Car);
car.run();

看完上面的示例,我们前面提到的第二个问题,已经完美解决了哈。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Dec 21 Javascript
js 分栏效果实现代码
Aug 29 Javascript
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
js弹窗代码 可以指定弹出间隔
Jul 03 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
Aug 28 Javascript
xml转json的js代码
Aug 28 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
javascript的switch用法注意事项分析
Feb 02 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
Mar 20 Javascript
JavaScript 作用域实例分析
Oct 02 Javascript
JavaScript实现网页动态生成表格
Nov 25 Javascript
angularJs中datatable实现代码
Jun 03 #Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
Jun 03 #Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 #Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
Jun 03 #Javascript
利用vueJs实现图片轮播实例代码
Jun 03 #Javascript
angular中使用Socket.io实例代码
Jun 03 #Javascript
jquery请求servlet实现ajax异步请求的示例
Jun 03 #jQuery
You might like
php实现jQuery扩展函数
2009/10/30 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
关于尾递归的使用详解
2013/05/02 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
python如何使用unittest测试接口
2018/04/04 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python3解释器知识点总结
2019/02/19 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
个人政治思想总结
2015/03/05 职场文书