104

http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.htmlを読ん でいますが、javascript を縮小すると angularjs の依存性注入に問題があることが判明したので、代わりに

var MyController = function($scope, $http) {
    $http.get('https://api.github.com/repos/angular/angular.js/commits')
      .then(function(response) {
        $scope.commits = response.data
      })
  }

あなたが使用する必要があります

var MyController = ['$scope', '$http', function($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}]

全体として、2番目のスニペットは古いバージョンのangularjs用だと思っていましたが....

常に注入方法 (2 つ目) を使用する必要がありますか?

4

7 に答える 7

104

はい、いつでも!したがって、ミニファーが $scope を変数 a に変換し、$http を変数 b に変換しても、それらのID は文字列内に保持されます。

AngularJS docs のこのページを参照し、 A Note on Minificationまでスクロールします。

アップデート

または、ビルド プロセスでng-annotate npm パッケージを使用して、この冗長性を回避できます。

于 2013-09-13T09:05:15.540 に答える
37

2 番目のバリアントを使用する方が安全ですが、最初のバリアントをngminで安全に使用することもできます。

更新: ng-annotateが、この問題を解決するための新しいデフォルト ツールになりました

于 2013-09-13T09:13:32.517 に答える
8

はい、明示的な依存性注入 (2 番目のバリアント)を使用する必要があります。しかし、Angular 1.3.1以降では、暗黙的な依存性注入をオフにできるため、(縮小する前に) 名前を一度に変更することで潜在的な問題を解決できると非常に役立ちます。

strictDiconfig プロパティを使用して、暗黙的な DI をオフにします。

angular.bootstrap(document, ['myApp'], {
    strictDi: true
});

ng-strict-diディレクティブを使用して、暗黙的な DI をオフにします。

<html ng-app="myApp" ng-strict-di>
于 2014-11-04T12:04:11.243 に答える
7

あなたが使用する場合、それを指摘するだけです

ヨーマン

のようにする必要はありません

var MyController = ['$scope', '$http', function($scope, $http) {
  $http.get('https://api.github.com/repos/angular/angular.js/commits')
    .then(function(response) {
      $scope.commits = response.data
    })
}]

ミニファイ中のうなり声は、DIの管理方法を考慮に入れているためです。

于 2013-09-19T13:18:13.590 に答える
1

OZ_ が言ったように、ngmin を使用して、directive.js service.js などのすべての角度付き js ファイルを縮小します。その後、Closure コンパイラを使用して最適化できます。

参照:

angularjs スクリプトを縮小する方法

YOでビルド

于 2013-10-11T18:44:53.627 に答える