angularjs - 如何在angularjs中禁用自动注入(inject)器(注入(inject)器类型的神奇发现)?

标签 angularjs

Angularjs 有这个基于函数参数自动发现提供者的好特性。
例如,如果我想在某个函数中使用 $http,我会这样称呼它:

$inject.invoke(function ($http) {

});

Angularjs 将“知道”我的依赖项是什么。它会通过阅读我的函数体并根据它知道的参数名称来解决这个问题。

但是,当您想缩小代码时会出现问题。 Minifier 将更改参数名称。这就是为什么我们应该使用这个符号:
$inject.invoke(['$http', function ($http) {}]);

或这个符号:
function Foo ($http) {}
Foo.$inject = ['$http'];

$inject.invoke(Foo);

我们应该始终缩小我们的代码。所以我们应该避免使用这个神奇的(第一个例子)符号。

现在我的问题:

我正在尝试缩小我的 js 代码,而 angularjs 无法解析提供程序名称。
我找不到没有指定的地方.$inject = [...] .现在它只是说:"Unknown provider a"而且我不知道它指的是什么功能。

是否可以关闭提供者的 angularjs 自动发现(自动注入(inject)器)?我会在缩小之前测试和修复我的代码。

所以,我想知道如何禁用这个“神奇”的 angularjs 推论。
因为我总是缩小我的代码,所以当我不小心使用这个 super 英雄的邪恶时,我希望 angularjs 对我大喊大叫。

如何关闭它?

最佳答案

只需编辑源代码。找到'function annotate',并将 fn == 'function' block 替换为如下内容:

if (typeof fn == 'function') {
  console.log("Bad magic injection in "+fn.toString().replace(STRIP_COMMENTS, ''));
}

关于angularjs - 如何在angularjs中禁用自动注入(inject)器(注入(inject)器类型的神奇发现)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13176416/

相关文章:

javascript - 如何解析 AngularJS 中的 $resource 对象

javascript - $scope.$watch 没有在指令中被触发

javascript - 根据范围内的数据在 Angular 中打开链接

javascript - 使用 AngularJS 进行 Jasmine 测试,Object [object Object] 没有方法 apply

javascript - 在 AngularJS 中,有没有一种方法可以使用指令或某种功能来显示多个 div?

javascript - AngularJS 模式中的 $scope 不会将数据传递到模板中

html - Bootstrap ui 轮播为空

angularjs - Angular js : Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource

javascript - AngularJS 指令未显示

Javascript lodash 展平分层对象