2017-01-25 16 views
3

私はAngular開発の初心者です。配列と関数の中にパラメータを挿入する理由

app.controller('mycontroller', ['$scope', 'myFactory', 'Myothers', function ($scope, myFactory, Myothers) {}]) 

、我々はこれを行う理由

app.controller('mycontroller', function ($scope, myFactory, Myothers) {}) 

はあなたが説明してもらえ参照してください。私たちは次のようにコントローラの内部で二回引数を注入理由がわからないのですか?

+0

縮小用です。 Angularは、変数名からあなたが望むサービスを推測することにより、名前付き引数をハックします。コードを小さくすると、引数の名前が変更されます。したがって、角が動くと、正しいサービスを見つけることができません。これにより、コードと角度を小さくして、どのサービスを注入しようとしているかを知ることができます。 – ste2425

+0

[AngularJS Developer Guide - Dependency Annotation](https://docs.angularjs.org/guide/di#dependency-annotation)を参照してください。 – georgeawg

答えて

6

理由はjavascriptの縮小からコードを保護することです。

$injectは、変数名が文字列の形式で保持されることを確認します。

は、理想的にはアプリのコードは次のようになります。Javascriptをカスタム名と変数名を置き換え

var app = angular.module('YourApp', []); 
var appCtrl = app.controller('AppCtrl', AppCtrl); 

appCtrl.$inject = ['dep1', 'dep2']; //add all the dependencies 

function AppCtrl (dep1,dep2){ //add the name of the dependencies here too 
    //your controller logic 
} 

縮小時には、そのdep1dによって置き換えられる可能性があるので、エラーが発生します。

しかし、$injectは、依存関係の実際の名前がdep1であることを角度に知らせ、縮小化から保護されたstring値の形式で格納されます。

したがって、$injectを使用します。

3

は、最初のあなたのような配列なしで行うことができます:あなたが何かのように行うことができます、あなたは、アレイ内の

app.controller("myController",function($scope,myFactory,MyOrders){}); 

は変数を宣言している:

app.controller('mycontroller',['$scope', 'myFactory', 'Myothers', function (s, f, o) {}]) 

sの範囲として、myfactoryとしてF、注文としてのo;

それを使用するにはどのようにあなたの選択であるが、角度のチュートリアルでは、彼らは正しい方法があると言う:

app.controller('mycontroller',['$scope', 'myFactory', 'Myothers', function (s, f, o) {}]) 
2

我々はArray引数として依存関係を渡すと、アプリケーションが生産に壊れていないときに我々minifyアプリケーション。これを行うには

方法:指定された関数の使用インライン無名関数に

を使用して、指定された機能

  • を使用して

    • を私たちは、依存関係を渡すことができます配列引数として名前付き関数を使用します。

      var app = angular.module('app', []); 
      
      app.controller('MyCtrl', ['$scope', function ($scope) { 
      
          $scope.name = "Rohit"; 
      
      }]); 
      

      相違:インライン無名関数の使用

      var app = angular.module('app', []); 
      
      function MyCtrl($scope) { 
      
          $scope.name = "Rohit"; 
      
      }; 
      
      app.controller('MyCtrl', ['$scope', MyCtrl]); 
      

      差をapp.controller('mycontroller', function ($scope, myFactory, Myothers) {})が縮小されるとき、パラメータ名が何であろう縮小さ及び角度されることはありませんどの依存関係を注入するかをより長く把握できるようになります。文字列に依存するarrayの構文は、それがminificationであることを意味します。

      代替ソリューション:

      我々はコードが再びminification安全であるようapp.controller('mycontroller', ['$scope', 'myFactory', 'Myothers', function ($scope, myFactory, Myothers) {}])app.controller('mycontroller', function ($scope, myFactory, Myothers) {})を変更しますng-annotateライブラリを使用することができます。

  • 関連する問題