如何在angularjs中禁用自动喷油器(喷油器类型的神奇发现)?

如何在angularjs中禁用自动喷油器(喷油器类型的神奇发现)?,angularjs,Angularjs,Angularjs具有基于函数参数自动发现提供程序的功能。 例如,如果我想在某个函数中使用$http,我会这样调用它: $inject.invoke(function ($http) { }); Angularjs将“知道”我的依赖项是什么。它将通过读取我的函数体并基于它将知道的参数名称来解决这个问题 但是,当您想缩小代码时,会出现问题。Minifier将更改参数名称。这就是为什么我们应该使用这个符号: $inject.invoke(['$http', function ($http) {}

Angularjs具有基于函数参数自动发现提供程序的功能。 例如,如果我想在某个函数中使用$http,我会这样调用它:

$inject.invoke(function ($http) {

});
Angularjs将“知道”我的依赖项是什么。它将通过读取我的函数体并基于它将知道的参数名称来解决这个问题

但是,当您想缩小代码时,会出现问题。Minifier将更改参数名称。这就是为什么我们应该使用这个符号:

$inject.invoke(['$http', function ($http) {}]);
function Foo ($http) {}
Foo.$inject = ['$http'];

$inject.invoke(Foo);
或此符号:

$inject.invoke(['$http', function ($http) {}]);
function Foo ($http) {}
Foo.$inject = ['$http'];

$inject.invoke(Foo);
我们最终应该缩小我们的代码。所以我们应该避免使用这种神奇的(第一个例子)符号

现在我的问题是:

我试图缩小我的js代码,angularjs无法解析提供者名称。 我找不到没有指定
$inject=[…]
的位置。现在它只是说:
“未知提供程序a”
,我不知道它指的是什么函数

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

所以,我想知道如何禁用这个“神奇的”angularjs推断。 由于我总是缩小我的代码,我希望angularjs在我不小心使用这个超级英雄邪恶时对我大喊大叫

如何关闭它?

更新:

如果有人因为试图缩小而需要这个,也许这里有另一个可能的解决方案

。这是一个AngularJS应用程序小型化项目

不确定这是否有帮助

据伊戈尔·米纳尔说

你应该做这样的东西

factory('Phone', function($resource){ ... }))

这是我的官方文件

$inject注释

允许minifer重命名函数参数并仍然 能够注入功能需要注释的正确服务 美元注入属性。$inject属性是一个服务数组 要注入的名称

var MyController = function(renamed$scope, renamedGreeter) {
...
}
MyController.$inject = ['$scope', 'greeter'];
必须注意保持$inject注释与同步 函数声明中的实际参数

此注释方法对于控制器声明非常有用,因为 它为函数指定注释信息


只需编辑源代码。查找“function annotate”,并将fn==“function”块替换为如下内容:

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

从1.3.0-beta.6版开始,angularjs支持ng strict di选项,该选项可与ng app指令一起用于禁用自动注入

如果app元素上存在此属性,则喷油器将 在“严格di”模式下创建。这意味着应用程序将失败 调用不使用显式函数注释的函数(和 因此不适合缩小),如依赖项中所述 注入指南和有用的调试信息将有助于跟踪 找出这些错误的根源


这个问题怎么了?为什么是负?人很奇怪。我帮你修好了。这个问题的标题应该是“如何在不破坏自动注入的情况下缩小角度代码?”或者类似的问题。我肯定会有其他人在找这个。我只是想知道如何禁用自动注射。我知道在缩小的过程中我应该使用.$inject=[]或[“Abc”,函数(Abc){}]符号。但如何让angularjs在开发过程中对我大喊大叫呢?您也可以使用“任何异常都会中断”和调试,然后转到调用者处查看有什么问题。谢谢,谢谢。然而问题是,我的代码中到处都有它。不是到处都是,在某个地方我错过了,现在不知道我在哪里错过了。我现在想禁用这个“角度自动魔术”选项,这样在开发过程中,当我不插入时,解释器会对我大喊大叫。$inject或['Abc',function(Abc){}]。当我在编写这种代码的时候,我可以解决一个问题。好了,现在我明白你的问题了。也许你也应该把这一点放在你的问题中。在这样做之后,angularjs总是抛出一个错误:“函数$LocaleProvider中的坏魔法注入”。所以它自己就停止工作了。我已经找到了手动注入依赖项的地方,现在可以成功缩小$LocaleProvider并没有引起我的问题。Andy的提示很好,但您只需更改为“console.log()”,而不抛出错误。因为您将此代码放在本地未压缩的angular.js中,所以andy的“抛出错误”会在angular的第一个内部提供程序($LocaleProvider)上立即停止,甚至不会到达您自己的代码。只要在andy给你的位置上运行console.log,你就会立即发现问题。这个技巧非常好,在我们的例子中可以进行调试。我们发现罪魁祸首函数是在“未知提供程序”错误之前立即记录的。要澄清这一点,请将其添加到angular.js源文件中。此外,我们还使用js beautifier重新格式化了缩小的代码,这使得识别函数更加容易。