修太(326)25この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。AngularJSでDIを実現するDI(依存性注入)は、簡単にいえば「オブジェクトに必要な情報を外部設定する手法」です。Javaの経験者であれば馴染みのある言葉ではないでしょうか。AngularJSでは、コードが依存性を保持するいくつかの方法を持っています。オブジェクト/関数が、依存性を取得するには次の方法があります。依存性が必要な場所に任意で渡す3つ目の手法を使用すればコンポーネント同士の結合も疎結合となるため、いちばんよい手法です。この手法であれば、依存性がそのままコンポーネントに引き渡されます。簡単な例を見てみましょう。this.greeterObj.greet(name);}上記の例では、MyClassはgreeterObjと依存関係はありません。greeterObj実行時に渡されるだけになってます。AngularJSは依存性管理のために「インジェクター(injector)」というものを持っています。インジェクターとは、依存性のチェックや生成を行う仕組みです。次のサンプルがインジェクターを使用した例です。injector.get('greeterObj');DIを使用すれば、ハードコーディングする必要はなくなります。次の例のように依存関係を定義し、インジェクターに依存性の探索を実行させます。・//ng-controllerディレクティブは、これを内部で行うinjector.instantiate(MyController);ng-controllerで指定されたコントローラは、インジェクターとは直接関係していません。MyControllerの依存性はちゃんと満たしています。コード上はインジェクターを扱ってはいませんが、必要な依存性はちゃんと設定されているのがわかります。依存性設定、いくつかの方法DIを実現したいとき、インジェクターが依存関係を解決するためにアノテーションを記述する必要があります。インジェクターは、どのサービスをDIするか事前に知っている必要があります。ここではそのいくつかの方法を解説します。依存関係を設定する一番単純な方法です。関数のパラメータ名を依存関係の名前とみなして設定します。...}インジェクターは、関数の宣言を調べてパラメータ名を抽出してDIするサービス名を調査します。$scopeとgreeterObjは、DIされる2つのサービスです。上の方法が最も単純なDI方法ですが、パラメーター名をみてDIしているので、それを変更される処理(たとえばJavaScriptの圧縮/難読化など)を行うと動作しなくなってしまいます。この方法はデモやモック用途のアプリでのみ使用するようにしたほうがいいでしょう。・$injectアノテーション圧縮や難読化による関数パラメータ名の変更をしてもサービスが正しくDIされるようにするため、$injectプロパティを使ったアノテーションを行うことができます。$injectプロパティは、DIするサービス名の配列となっています。'greeterObj'];$inject配列の値の順序はDIする引数の順序と一致する必要があります。newGreeterObjにそれぞれDIされます。・インラインアノテーション$injectアノテーション形式は、DIする際に下記のように冗長になることがあります。greeterFactory);微妙に面倒ですね。このような場合、次のように少しシンプルに記述することもできます。...}]);これらのDI設定方法は同じように動作し、DIがサポートされるどこでも使用可能です。DIはどこで使用できるかDIは、コントローラとファクトリー用関数でよく使用されます。・コントローラでDIコントローラはアプリの振る舞いを定義します。コントローラ宣言では、配列を使用したDI方法がよく使用されます。...}]);このようにすることで、コントローラがグローパル関数化される事を防ぎ、JavaScript圧縮化への対処にもなります。・ファクトリーメソッドでDIファクトリーメソッドは、AngularJS内のさまざまなオブジェクト作成を行います。(ディレクティブ/サービス/フィルター等)ファクトリーメソッドはモジュールに登録されます。次のようなファクトリー宣言手法が推奨されてます。}]);まとめ今回はAngularJSを代表する機能の1つ、DIについて解説しました。次回はAngularJSのサービスについて解説する予定です。3,263,063プログラマーです。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。