gpt4 book ai didi

AngularJS:使用第三方库而不暴露全局变量

转载 作者:行者123 更新时间:2023-12-02 19:44:43 25 4
gpt4 key购买 nike

在 Angular 中使用第三方库而不暴露全局变量的最佳方法是什么?

例如,如果我使用 underscore.js,我只想将 _ 注入(inject)到使用它的 Controller 中。

angular.module('module').controller(function(_) {
// _ is injected only into this scope
};

为了获得这种效果,我看到有些人使用脚本标记全局加载下划线,然后创建如下服务:

myModule.factory('_', function ($window) {
return $window._;
});

但是,这仍然会用 _ 污染全局范围。

是否有一种“Angular 方式”来注册和注入(inject)第三方库而不会导致此问题?

最佳答案

您无法对第三方库的编写方式做任何事情,除非 fork 它们并创建您自己的版本。

第三方库几乎总是会在全局范围内创建此类变量,并且您提到了在 Angular 模块中使用它们的两种最常用的方法:通过注入(inject) $window 并直接使用它们,或者通过创建提供对象的瘦服务

在大多数情况下我更喜欢后者,因为它使其他模块中的代码更简单。另外,在我看来,服务方法使 Controller 中的代码看起来不那么“神奇”并且更易于调试,因为很清楚库的位置,例如_ 来自。 “凭空”出现的变量是全局变量的一些问题。

库仍然会“污染”全局范围,除非您显式地将它们从全局范围中删除,也许是在服务中获取指向它们的指针之后,然后服务可以将其传递。但是,我看不到这样做的任何动机。任何其他尝试,例如使用 Angular 服务实际下载第三方脚本并对其进行评估,以某种方式阻止其到达全局范围,似乎效率极低、过度设计且缓慢(无论是在计算上还是在 HTTP 请求时)被解雇)。

最好不要创建超出绝对必要的全局变量。

关于AngularJS:使用第三方库而不暴露全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com