我最近在旧代码库中强制执行ng-strict-di
,现在在运行应用时收到警告和错误。例如,在下面的代码中
export default angular
.module("profile", ["ui-router"])
.controller("profileCtrl", profileCtrl)
.config(($translateProvider) => {
---
});
我想了解如何为config明确定义$inject
因为我得到以下错误:
function($translateProvider) is not using explicit annotation and cannot be invoked in strict mode
答案 0 :(得分:0)
它想要类似的东西:
export default angular
.module("profile", ["ui-router"])
.controller("profileCtrl", profileCtrl)
.config(["$translationProvider", ($translateProvider) => {---}]);
根据此页面上的文档记录: https://docs.angularjs.org/error/ $注射器/ strictdi “尝试调用未明确注释的函数或提供程序时会发生此错误,而应用程序在启用严格模式的情况下运行”
显式表示法是为通过代码缩小过程维护的代码功能而设计的。当javascript被缩小时,被注入的依赖项将被替换为单个字符。因此失去了引用。 Angular不会知道参数实际应该是什么值,并会引发错误。
为了解决这个问题,Angular允许显式依赖注释。使用字符串数组(即["$translationProvider", function($translateProvider)]
来关联依赖关系的表示。这是有效的,因为字符串不会缩小。
第二种方法是使用$ inject属性,如下所示:
export default angular
.module("profile", ["ui-router"])
.controller("profileCtrl", profileCtrl)
.config(($translateProvider) => {---});
profileCtrl.$inject = ["$translationProvider"];
目的保持不变。依赖注射可以在缩小过程中存活下来。