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 相关文章推荐
js禁止回车提交表单的示例代码
Dec 23 Javascript
node.js中的path.isAbsolute方法使用说明
Dec 08 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
JavaScript 中 avalon绑定属性总结
Oct 19 Javascript
浅谈jQuery中事情的动态绑定
Feb 12 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
Oct 12 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
swiper 自动图片无限轮播实现代码
May 21 Javascript
基于react项目打包css引用路径错误解决方案
Oct 28 Javascript
JavaScript 实现继承的几种方式
Feb 19 Javascript
Node实现搜索框进行模糊查询
Jun 28 Javascript
elementui的el-popover修改样式不生效的解决
Jun 30 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中$_FILES的使用以及注意事项
2013/07/05 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
详解Python Socket网络编程
2016/01/05 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
小学生作文评语
2014/04/18 职场文书
医生辞职信范文
2015/03/02 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
手写实现JS中的new
2021/11/07 Javascript
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android