2016-09-17 5 views
3

AngularJSの依存性注入は実際にどのように機能しますか?AngularJSはJS minifierでどのように動作しますか

ええ、私は多くのものを読んで、どのようにを使用することを知っています。

app.controller('LoginCtrl', ['$scope', '$rootScope', '$http', '$location', function($scope, $rootScope, $http, $location) { /* ... */ }]); 

私たちはJSのminifiersを使用できるように配列を渡す使用する必要があることを知っているので、角度とにかく依存関係の本当の名前を知っています:

たちは、次のコントローラを持っていると仮定します。

実際にJSミニファイアを使用し、$scope$sにトラスティ化したとします。この$sが実際に$scopeであることをAngularはどのように知っているので、$scopeのドキュメントに記載されているインターフェイスと同じインターフェイスを使用する必要がありますか?

+0

私は理由が考えている理由は、Angularは$ location変数がグローバル$スコープ変数が縮小されたコードで必要なコンテキストを提供することを可能にする引数として提供できることを知っているからです。 –

+0

@Benjamin Dean申し訳ありませんが、私はそれを取得しません。あなたは詳しく説明できますか? – FrozenHeart

+0

ニッキーは技術的な理由に答えました。コードの最小化について考えてみる最も簡単な方法は、すべての長い変数と関数名を可能な限り最短で人間が読めない識別子に置き換えることです。修飾子は実際にコードの構造を変更するものではありません。単に英語のように頭文字を短くするために略語を使用するように、言葉遣いを小さくします。これにより、コードのファイルサイズが縮小され、ネットワーク経由でファイルを転送する速度が向上します。 –

答えて

4

細分化プロセスは、ファイルの重みを減らすために、関数のすべての名前とパラメータを短くします。だからあなたのコントローラが縮小さ取得後、彼は次のようになります:

function(a, b, c, d) { /* ... */ }]);

しかし、あなたは$injectを使用して、または機能を注射の配列を渡すされている場合、それはあなたの機能が正確にサービスがそれぞれに注入すべきかを知るようになりますのパラメータをコントローラに入力します。だから、角度縮小されます後、依然として注入及び位置番号(配列の要素のインデックス)されるべきサービスの名称は、コントローラ関数のパラメータのインデックスにリンクされているであろうそれらの各

app.controller('LoginCtrl', [ 
'$scope', '$rootScope', '$http', '$location', 
function(a, b, c, d) { /* ... */ }]); 

。だから、わかるように、注文事項

+0

本当ですか?私は、配列の要素を更新しなくても、そのような関数のパラメータを並べ替えることができると思った。 – FrozenHeart

+0

ドキュメント - https://docs.angularjs.org/guide/diを見てください。 "$ injectプロパティ注釈"の場合にのみ、 "$ inject配列の値の順序は、MyControllerのパラメータの順序と一致しなければなりません"と言います。 「インライン配列注釈」では、「注釈配列を関数宣言のパラメータと同期させておくように注意してください」と書かれています。私は配列と同じ数の引数を渡さなければならないということを意味していると思いました。 – FrozenHeart

+0

@FrozenHeartいいえ、できません。 [this](http://stackoverflow.com/q/29868888/) –

関連する問題