Angular service 详解
Posted 前端初学者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular service 详解相关的知识,希望对你有一定的参考价值。
Angular为什么需要service
组件应该是专注于展示层,所以需要service来获取数据和保存数据。
组件之间的通信需要service来协助完成。
为什么需要依赖注入
从一个小例子说起
export class Car {
public engine: Engine; // 引擎
public tires: Tires; // 轮胎
constructor() {
this.engine = new Engine();
this.tires = new Tires();
}
}
上面创建了一个汽车类,但是这个类完全没有健壮性。假如引擎的构造函数改变了,构建引擎的时候需要传一个参数,我们就得去汽车类里面改变new Engine()这个使用。如果仅仅是需要改两个地方可能还能接受,但是如果引擎类还依赖别的零件,这么一层层的依赖关系,其中一个构造函数要发生改变了,可能会导致一连串的改变,会导致写出来的代码完全没有可维护性。轮胎也是如此,不同的汽车需要不同的轮胎,那么像上述这么写就不太灵活,没有通用性可言。
所以这样就需要依赖注入
export class Car { constructor(public engine: Engine, public tires: Tires) { } }let car = new Car(new Engine(), new Tires());
这样 engine和tire 和car类就是分离的,只要你是传入的引擎和轮胎是满足要求的,那么这个car就是okay的。
class Engine2 {
constructor(public cylinders: number) { }
}
// 如果需要一个12缸的引擎, 这样我们完全不用动car类。
let bigCylinders = 12;
let car = new Car(new Engine2(bigCylinders), new Tires());
依赖注入这种模式也为编写测试用例提供了方便,在测试car类的时候,你不必去关系轮胎细节,只要给出一个可用的轮胎就行。
上面解释了依赖注入是什么,以及为什么需要依赖注入。就是一个类从外界接受他所需要的依赖关系,而不是自己去创造它们。但是对于消费者,问题又来了。想要一辆车,就必须得有一个工厂来组装出一个车
import { Engine, Tires, Car } from './car';export class CarFactory { createCar() { let car = new Car(this.createEngine(), this.createTires()); car.description = 'Factory'; return car; } createEngine() { return new Engine(); } createTires() { return new Tires(); } }
以上是关于Angular service 详解的主要内容,如果未能解决你的问题,请参考以下文章
typescript Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming/angular-2/
typescript Angular最终版本的Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming
typescript Angular最终版本的Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming
typescript Angular最终版本的Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming