15

Angularjs には、関数の引数に基づいてプロバイダーを自動検出するという優れた機能があります。たとえば、関数で $http を使用したい場合は、次のように呼び出します。

$inject.invoke(function ($http) {

});

Angularjs は、私の依存関係を「認識」します。私の関数の本体を読んで、引数名に基づいてそれを理解するでしょう。

ただし、コードを縮小したい場合には問題があります。Minifier は引数名を変更します。そのため、次の表記法を使用する必要があります。

$inject.invoke(['$http', function ($http) {}]);

またはこの表記:

function Foo ($http) {}
Foo.$inject = ['$http'];

$inject.invoke(Foo);

最後に常にコードを縮小する必要があります。したがって、このマジック (最初の例) 表記の使用は避ける必要があります。

そして今私の問題:

js コードを縮小しようとしていますが、angularjs がプロバイダー名を解決できません。指定していない場所が見つかりません.$inject = [...]。今はただ言うだけです:"Unknown provider a"そして、それがどの機能を参照しているのかわかりません。

プロバイダーの angularjs 自動検出 (自動インジェクター) をオフにすることは可能ですか? 縮小する前にコードをテストして修復します。

だから、この「魔法の」angularjs推論を無効にする方法を考えています。私はいつも自分のコードを縮小しているので、誤ってこのスーパーヒーローの悪を使ってしまうと、angularjs に怒鳴ってもらいたいのです。

オフにする方法は?

4

3 に答える 3

8

ソースを編集するだけです。'function annotate' を見つけて、 fn == 'function' ブロックを次のように置き換えます。

if (typeof fn == 'function') {
  console.log("Bad magic injection in "+fn.toString().replace(STRIP_COMMENTS, ''));
}
于 2012-11-01T15:46:07.463 に答える
4

アップデート:

縮小しようとしているために誰かがこれを必要とする場合は、おそらく別の解決策があります

ngmin . これは AngularJS アプリケーションのミニファイア プロジェクトです。

これが役立つかどうかはわかりません。

イゴール・ミナールによれば、

あなたはこのようなものを作るべきです

factory('Phone', function($resource){ ... }))

factory('Phone', ['$resource', function($resource){ ... })])

Dev guideの公式ドキュメントは次のとおりです。

$inject アノテーション

ミニファーが関数パラメーターの名前を変更し、適切なサービスを注入できるようにするには、関数に $inject プロパティで注釈を付ける必要があります。$inject プロパティは、注入するサービス名の配列です。

var MyController = function(renamed$scope, renamedGreeter) {
...
}
MyController.$inject = ['$scope', 'greeter'];

$inject 注釈が関数宣言の実際の引数と同期していることに注意する必要があります。

このアノテーションの方法は、アノテーション情報を関数に割り当てるため、コントローラの宣言に役立ちます。

于 2012-11-01T14:59:19.123 に答える