0

我最近ng-strict-di在旧代码库中强制执行,现在在运行应用程序时收到警告和错误。例如,在下面的代码中

export default angular
    .module("profile", ["ui-router"])
    .controller("profileCtrl", profileCtrl)
    .config(($translateProvider) => {
---
});

我想了解如何$inject在出现以下错误时为配置显式定义:

function($translateProvider) is not using explicit annotation and cannot be invoked in strict mode
4

1 回答 1

0

它想要类似的东西:

export default angular
    .module("profile", ["ui-router"])
    .controller("profileCtrl", profileCtrl)
    .config(["$translationProvider", ($translateProvider) => {---}]);

根据此页面上的文档: https://docs.angularjs.org/error/ $injector/strictdi “当应用程序以严格运行时,尝试调用未明确注释的函数或提供程序时会发生此错误-已启用 di 模式"

这里有一点解释: http: //frontendcollisionblog.com/javascript/angularjs/2015/03/31/something-no-one-tells-you-about-minifying-angularjs-controllers-until-its-too-后期.html

显式表示法是为通过代码缩小过程维护的代码功能而设计的。当 javascript 被缩小时,被注入的依赖项将被单个字符替换。因此失去那里的引用。Angular 不知道参数实际应该是什么值,并且会抛出错误。

为了解决这个问题,Angular 允许显式的依赖注解。使用字符串数组(即["$translationProvider", function($translateProvider)]关联依赖项的表示。这是有效的,因为字符串不会被缩小。

第二种方法是使用如下所示的 $inject 属性:

export default angular
    .module("profile", ["ui-router"])
    .controller("profileCtrl", profileCtrl)
    .config(($translateProvider) => {---});
    profileCtrl.$inject = ["$translationProvider"];

目的保持不变。为了使依赖注入能够在缩小过程中存活。

于 2018-04-07T23:36:13.760 回答