在不暴露全局变量的情况下使用第三方库的最佳方式是什么?
例如,如果我使用underscore.js,我只想将_注入到只使用它的控制器.
angular.module('module').controller(function(_) { // _ is injected only into this scope };
为了达到这个效果,我看到一些人用脚本标签在全球下载了下划线,然后创建了一个这样的服务:
myModule.factory('_',function ($window) { return $window._; });
然而,这仍然会用_来污染全球范围.
除了通过分派和创建自己的版本之外,您不能对第三方库的写作做任何事情.
原文链接:https://www.f2er.com/angularjs/143206.html第三方库将几乎总是在全局范围内创建这样的变量,并且您将提到在角度模块中使用两种最常用的方法:通过注入$window并直接使用它们,或通过创建提供对象的瘦服务.
在大多数情况下,我会赞成后者,因为它使得其他模块中的代码更简单.另外,在我看来,服务方法使得你的控制器中的代码看起来不那么“魔法”,而且可以调试,因为它清楚了图书馆的位置. _来自.出现“超薄空气”的变量是全局变量开始的一些问题.
库将仍然会“污染”全局范围,除非您明确地将其从全局范围中删除,也许在获取服务中的指针之后,然后可以传递它.但是,我看不到有这样做的动机.任何其他尝试,例如使用Angular服务实际下载第三方脚本并对其进行评估,以某种方式阻止其达到全局范围,似乎无效率,过度设计和缓慢(在计算方面以及HTTP请求是否为解雇).
否则,除了严格要求外,不要创建任何更多的全局变量.