一尘不染

AngularJS Strict DI模式有什么好处?

angularjs

最近,我遇到了AngularJS Strict DI模式。使用它的目的和好处是什么?通过特别在移动设备上使用它,我们是否可以显着提高性能?

我尝试将其应用于代码,编写代码时未做任何注释。但是,我要压缩代码,并在构建过程中进行ng-
annotate。但是,为什么在将严格的DI模式添加到代码中后,仍然出现错误消息“需要显式注释”?


阅读 302

收藏
2020-07-04

共1个答案

一尘不染

严格的DI模式基本上在运行时发现不符合最小化要求的代码时引发错误;但请注意,该代码可能是正确的,并且没有逻辑语法错误。

引用文档:

如果该属性存在于app元素上,则将以“ strict-di”模式创建注射器。这意味着应用程序将无法调用 不使用显式函数注释 (因此不适合缩小)的
函数 (如“依赖关系注入”指南中所述),并且有用的调试信息将有助于跟踪这些错误的根源。

例如,此代码触发错误,因为($scope, $http, $filter)没有使用数组$inject.controller(A,B)将数组作为第二字段的方法显式注入。

angular.module("myApp", [])
// BadController cannot be invoked, because
// the dependencies to be injected are not
// explicitly listed.
.controller("BadController", function($scope, $http, $filter) {
  // ...
});

右代码段:

angular.module("myApp", [])
  .controller("GoodController1", GoodController1);

GoodController1.$inject = ["$scope", "$http", "$filter"];

function GoodController1($scope, $http, $filter){}

要么:

angular.module("myApp", [])
  .controller("GoodController1", 
              ["$scope", "$http", "$filter", function ($scope, $http, $filter){
     //...
}]);

为了回答您的问题,使用它不会显着提高性能。它仅授予您最小化错误的安全性。这是因为最小化会更改变量名称,例如在您$scope不使用显式批注的情况下使用它会破坏代码。

2020-07-04