如果我已经安装了jquery&其类型:
npm i jquery
npm i @types/jquery
和导入它的能力
import * as $ from 'jquery';
现在我已经满员了:
所以我的问题是:我为什么要使用InjectionToken(以前的OpaqueToken)来围绕jQuery创建另一个层?我的意思是:什么是真正的好处?也许我可以在单元测试时模拟jQuery,但是在Angular应用程序中我从来没有真正做过它而从未见过它......
答案 0 :(得分:0)
可测试性是DI的好处之一,也是最明显的原因,为什么使用全局变量和导入的库作为Angular提供者是一个好习惯(即使导入jQuery,它仍然可以是全局的)。间谍或存根提供者比导入模块容易得多。
DI使用jQuery.noConflict()
在同一个应用程序中维护多个jQuery版本变得更容易。这消除了问题如果第三方模块依赖于某些jQuery版本,并且应用程序单元依赖于另一个。
DI为服务器端渲染提供了一些自由裁量权。尽管可以在Node.js中使用jQuery,但这需要为window
实例提供DOM实现。使用DI,可以轻松地将应用程序单元中的jQuery替换为像Cheerio这样的节点友好实现或者不涉及DOM的一些存根。