发表于: 2017-06-23 20:47:40

2 926


今天完成的事情

依赖注入是Angular中重要的一个内容,所以打算把这部分总结一下,写一个Angular 依赖注入的总结,今天完成的第一节,第二节写到一半的样子,先发第一节上来吧。


明天计划的事情

明天打算把Angular依赖注入总结写完,现在还剩下

1. 限定方式的依赖注入

2. provider

这两部分。


遇到的问题

第一次发现揭秘上有错,以前傻乎乎的就信了。依赖注入之博大精深远超你想象。


收获

Angular依赖注入依靠注入器来完成,注入器根据我们写在构造函数中的服务来为我们的组件提供相应的服务,中间过程完全不用去操心。这很爽。

Angular依赖注入在Angular JS上进行了大量的优化取长补短,据说Angular JS 中的服务只能是全局单例,而Angular则不必。详见。。。明天日报。

依赖注入说起来也不是很难的东西但是要真正的写出来可以要费一番心思的,也不知道能不能看懂。

Angular 依赖注入

一、什么是依赖注入

控制反转

控制反转的概念最早在2004年由Martin Fowler提出,是针对面向对象设计不断复杂化而提出的一种设计原则,是利用面向对象编程法则来降低应用耦合的设计模式。

IoC强调的是对代码引用的控制权由调用方转移到了外部容器,在运行是通过某种方式注入进来,实现了控制反转,这大大降低了程序之间的耦合度。依赖注入是最常用的一种实现IoC的方式,另一种是依赖查找

依赖注入

当然,按照惯例我们应该举个例子, 哦对,我们主要说明的是依赖注入,依赖查找我也不会。

假设我们有一个能做汉堡的设备(HRobot),需要用肉(mea)和一些沙拉(salad)作为原料,我们可以这样实现:

export class HRobot {
   public meat: Meat;
   public salad: Salad;
   constructor() {
       this.meat = new Meat();
       this.salad = new Salad();
   }
   cook() {}
}

看一下好像没有什么问题,可能你已经发现,我们的原材料都是放在机器里面的,如果我们想吃别的口味的汉堡恐怕就要去乡村基了。
为了可以吃到别的口味的汉堡,我们不得不改造一下我们的HRobot:

export class HRobot {
   public meat: Meat;
   public salad: Salad;
   constructor(public meat: Meat, public salad: Salad) {
       this.meat = meat;
       this.salad = salad;
   }
   cook() {}
}

现在,只要要直接给它meat和salad就好了,我们的HRobot()并不需要知道给它的是什么样的meat:

let hRobot = new HRobot(new Meat(), new Salad());

比如,我们想吃鸡肉汉堡,只需要个它一块鸡肉就好:

class Chicken extends Meat {
   meat = 'chiken';
}
let cRobot = new HRobot(new Chicken(), new Salad());

感觉还不错,我们再也不会为了吃一个鸡肉汉堡大费周章的去改造一台机器,这太不可思议了。

我可能想到了,你还是懒得弄块鸡肉给它,这时候可以使用工厂函数:

export class HRobotFactory {
   createHRobot() {
       let robot = new HRobot(this.createMeat(), this.createSalad());
   }
   
   createMeat() {
       return new Meat();
   }
   
   creatSalad() {
       return new Salad();
   }
}

现在有了工厂,就有源源不断的汉堡可以吃了,开不开心,惊不惊喜?
好吧,没有最懒,只有更懒,连工厂都懒得管理我也是无话可说,幸运的是我们有Angular提供的依赖注入框架,它可以让你伸手就有汉堡吃!



返回列表 返回列表
评论

    分享到