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 相关文章推荐
基于JQuery的6个Tab选项卡插件
Sep 03 Javascript
jQuery实战之仿淘宝商城左侧导航效果
Apr 12 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
window.location 对象所包含的属性
Oct 10 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
Dec 20 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
jquery判断类型是不是number类型的实例代码
Oct 07 Javascript
AngularJS入门教程之模块化操作用法示例
Nov 02 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
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 fsockopen写的HTTP下载的类
2007/02/22 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
PHP 8新特性简介
2020/08/18 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
基于Python实现用户管理系统
2019/02/26 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Python字符串对象实现原理详解
2019/07/01 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
开放系统互连参考模型
2016/06/29 面试题
中文专业毕业生自荐信
2014/05/24 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
学生安全责任书模板
2014/07/25 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL