使用Angular 4的jQuery:InjectionToken与TypeScript导入

时间:2017-05-25 11:59:05

标签: jquery angular

如果我已经安装了jquery&其类型:

npm i jquery
npm i @types/jquery

和导入它的能力

import * as $ from 'jquery';

现在我已经满员了:

  • TypeScript支持
  • jQuery自动包含在捆绑包中(我使用Angular CLI)

所以我的问题是:我为什么要使用InjectionToken(以前的OpaqueToken)来围绕jQuery创建另一个层?我的意思是:什么是真正的好处?也许我可以在单元测试时模拟jQuery,但是在Angular应用程序中我从来没有真正做过它而从未见过它......

1 个答案:

答案 0 :(得分:0)

可测试性是DI的好处之一,也是最明显的原因,为什么使用全局变量和导入的库作为Angular提供者是一个好习惯(即使导入jQuery,它仍然可以是全局的)。间谍或存根提供者比导入模块容易得多。

DI使用jQuery.noConflict()在同一个应用程序中维护多个jQuery版本变得更容易。这消除了问题如果第三方模块依赖于某些jQuery版本,并且应用程序单元依赖于另一个。

DI为服务器端渲染提供了一些自由裁量权。尽管可以在Node.js中使用jQuery,但这需要为window实例提供DOM实现。使用DI,可以轻松地将应用程序单元中的jQuery替换为像Cheerio这样的节点友好实现或者不涉及DOM的一些存根。