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 相关文章推荐
用正则表达式 动态创建/增加css style script 兼容IE firefox
Mar 10 Javascript
javascript IFrame 强制刷新代码
Jul 23 Javascript
Jquery如何实现点击时高亮显示代码
Jan 22 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
JavaScript 获取任一float型小数点后两位的小数
Jun 30 Javascript
node.js中的path.delimiter方法使用说明
Dec 09 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
Dec 13 Javascript
Vue.js鼠标悬浮更换图片功能
May 17 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
基于AngularJs select绑定数字类型的问题
Oct 08 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
Aug 31 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
php数字转汉字代码(算法)
2011/10/08 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
跟老齐学Python之变量和参数
2014/10/10 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
python字符串查找函数的用法详解
2019/07/08 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
基于python实现雪花算法过程详解
2019/11/16 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python tcp传输代码实例解析
2020/03/18 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
银行员工职业规划范文
2014/01/21 职场文书
整改落实自查报告
2014/11/05 职场文书
辞职信怎么写
2015/02/27 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
python创建字典及相关管理操作
2022/04/13 Python