スコープへのリンクとテンプレートで一緒に使用することが出来るテンプレート関数を生成します。コンパイルとはDOMツリーを辿って、ディレクティブのためにDOM要素をつなぎ合わせる過程の事を示します。このドキュメントは全てのディレクティブオプションの詳細で専門的なリファレンスになります。一般的なサンプル付きの初学者向きの内容を参照したければ、ディレクティブのガイドを参照してください。ディレクティブAPIの詳細ディレクティブのための多くの異なるオプションが存在します。異なる部分とは、ファクトリー関数の戻り値に存在します。postLink関数(他の全てのプロパティはデフォルト値)のどちらかを返すことが可能です。"ディレクティブ定義オブジェクト"形式を使用することをお勧めします。下記は、ディレクティブ定義オブジェクトを使用した定義例になります。指定の無いオプションにはデフォルト値が使用されます。この後の内容でデフォルト値について確認しておいてください。デフォルト値が使用されるため、上記の例は次のようにシンプルにすることが可能です。Object)ディレクティブ定義オブジェクトは、コンパイルに対して指示をする内容を提供します。その属性は、下記のとおりになります。ディレクティブが適用される順番が指定されている事が必要になるケースがあります。priorityは、それらのコンパイル関数が呼び出される前に並び替えを行うのに使用されます。priorityは数値で定義されます。大きな数値のpriorityを持つディレクティブが、先にコンパイルされます。pre-link関数もまた優先度順に実行されますが、post-link関数は反対の順序で実行されます。同じ優先度のディレクティブの順序は、不明確になります。terminalもし、trueが指定されるとディレクティブの現在のpriority(優先度)が最後として指定されます。(幾つかのディレクティブは、同じpriorityは不明確としてまだ現在のpriorityの順序で実行されます。(翻訳に自信なし))scopeもし、trueが指定されると、新しいスコープがこのディレクティブのために作成されます。同じ要素上の複数のディレクティブが新しいスコープを要求した場合、スコープは1つだけ作成されます。テンプレートのrootスコープは適用しません。{}(ハッシュオブジェクト)が指定されると、新しい"隔離(isolate)"スコープが作成されます。"隔離(isolate)"スコープは通常のスコープとは異なり、親スコープからプロトタイプ継承を行いません。親スコープのデータを誤って読み込んだり編集してしまうことを防いでくれます。"隔離(isolate)"スコープは、親スコープから取り出したローカルスコープのプロパティが定義されたオブジェクトハッシュを取得します。これらのローカルプロパティは、テンプレート値をエイリアスする際に便利です。ローカルプロパティの定義は、下記を基にしたプロパティのハッシュになります。DOM属性の値は、ローカルのスコープに紐付けられます。DOM属性が文字列であるため、この結果は常に文字列になります。attr名が指定されなければ、属性名はローカルの名前と同じものとみなされます。{{name}}の値が補完されたものが反映されます。そのため、name属性が変更されると、それがwidgetスコープ上のlocalNmaeプロパティに反映されます。nameは親スコープから読み込まれます。親スコープのプロパティ間の双方向紐付けを設定します。attr名が指定されなければ、属性名はローカルの名前と同じであるとみなされます。widgetスコープのプロパティであるlocalModelには、親スコープ上のparentModelの値が反映されます。parentModelへの何らかの変更は、localModelに反映され、localModelへの何らかの変更はparentModelに反映されます。親スコープが存在しなければ、NON_ASSIGNABLE_MODEL_EXPRESSION例外をスローします。この=?または=?attrを、任意のオプションのフラグとして使用するのは避けてください。親スコープのコンテキスト内の式を実行する手段を提供します。attrm名が指定されなければ、属性名はローカル名と同じとみなされます。value式をラップする関数を指し示すようになります。ローカル変数名と式をラップしている関数への値のマップを渡すことで、それを行うことが可能です。amount値を指定することが出来ます。controllerコントローラーのコンスタラクタ関数です。コントローラーは、pre-linkフェーズと、それが他のディレクティブに共有される前にインスタンス化されます。これは、ディレクティブ間で互いに連絡を可能とし、相互の振る舞いを強力にしてくれます。コントローラーは以降で説明するlocalsで注入可能(且つ括弧表記をサポート)です。要素に関連付けられた現在のスコープです。要素の現在の属性オブジェクトです。transcludeリンク関数は、正しいtransclusionスコープに予め紐付きます。このスコープは任意の1つ目の引数で上書きすることが可能です。cloneLinkingFn)require他のディレクティブを必要とし、そのコントローラーを4つ目の引数としてリンク関数へ注入します。requireは渡されるディレクティブ(複数可)の名前の文字列を取得します。配列が使用されると、注入される引数はその順番に対応した配列になります。名前には下記の接頭辞が使用されます。現在の要素上で必要とするコントローラーが検索されます。見つからなければ、エラーがスローされます。必要とするコントローラーの発見を試み、もし見つからなければリンク関数へはnullが渡されます。親の要素から検索することで、必要とするコントローラーを発見します。見つからなければ、エラーがスローされます。親の要素から検索することで、必要とするコントローラーの発見を試みます。見つからなければリンク関数へはnullが渡されます。controllerasディレクティブスコープでのコントローラーのエイリアスです。コントローラーへのエイリアスであるため、ディレクティブのテンプレートで参照することが可能になります。ディレクティブは、この構成が使用されるスコープの定義を必要とします。ディレクティブがコンポーネントとして使用されるケースで便利です。restrictEACMの各文字は、ディレクティブの宣言スタイルの指定を制限します。省略されるとデフォルト(属性のみ)が適用されます。-->template現在の要素をHTMLのコンテンツに置換します。置換処理は、古い要素から新しいものへ全ての属性/クラスを移行します。サンプルについては、ディレクティブのガイドを参照してください。テンプレートを表す文字列を返す関数として指定することが出来ます。templateurl基本的にtemplateと同じですが、テンプレートを指定したURLから読み込みます。テンプレートの読み込みは非同期のため、コンパイルとリンクの処理はテンプレートの読み込みが終わるまで待たされます。URLを表す文字列を返す関数として指定することが出来ます。どちらのケースでも、テンプレートURLは$sce.getTrustedResourceUrlを通して渡されます。replaceテンプレートが挿入されるべき場所を指定します。デフォルトはfalseです。テンプレートは現在の要素と置換されます。テンプレートは現在の要素のコンテンツを置換します。transclude要素のコンテンツをコンパイルし、ディレクティブで利用可能にします。一般的に、ngTranscludeで使用されます。トランスクルージョンの利点は、リンク関数が予め正しいスコープへ紐付けられたトランスクルージョン関数を受け取ることです。トランスクルージョンは子では無く、隔離スコープの兄弟になります。トランスクルージョンが親(予め隔離された)スコープへ紐付けられます。ディレクティブのコンテンツをトランスクルードします。低い優先度(priority)で定義されたディレクティブを含む要素全体をトランスクルードします。}compile関数は、テンプレートDOMの変換を扱います。ほとんどのディレクティブはテンプレートの変換を行わないため、これはそれ程使用されません。ように非同期でコンテンツを読み込むようなものです。compile関数は下記の引数を受け取ります。ディレクティブが宣言されている要素です。要素と子要素上でのみテンプレート変換をしても安全です。compile関数で全てのディレクティブ間で共有されるこの要素上で宣言された正規化された属性です。このテンプレートインスタンスとリンクのインスタンスは、テンプレートが複製されると異なるオブジェクトになるかもしれません。そのため、compile関数内で複製された全てのDOMノードに適用するDOM変換は危険以外の何物でもありません。DOMリスナーの登録はcompile関数内では無く、リンク関数内で行うべきです。transclude関数をcompile関数に渡すことは、例えば外部スコープを正しく理解できないため非推奨です。代わりに、transclude関数はlink関数に渡して使用するようにしてください。compile関数は、関数またはオブジェクトの戻り値を持つことが可能です。compile関数が空の際に、configオブジェクトのlinkプロパティ介して登録されるリンク関数と等価です。リンクのフェーズ中にリンク関数が呼び出されるべきタイミングを制御できます。後述するpre-linking関数とpost-linking関数について確認しておいてください。linkこのプロパティは、compileプロパティが定義されたなかった場合にのみ使用されます。}link関数はDOMの更新はもちろんのこと、DOMリスナーの登録も請け負います。これはテンプレートが複製された後に実行されます。ディレクティブのロジックの大半が、ここに置かれます。登録された監視(watch)用にディレクティブによって使用されるスコープです。ディレクティブが使用される要素です。子は既にリンクされているため、postLink関数内でのみ要素の子を操作しても安全です。この要素上の全てのディレクティブのリンク関数間で共有される、宣言された属性の正規化されたリストです。要素上の少なくとも1つのディレクティブに定義されたコントローラーのインスタンスです。連絡用のチャンネルとしてディレクティブで使用することが出来るようになります。トランスクルードのリンク関数は、正しいトランスクルージョンのスコープに予め紐付けられます。スコープは任意の第1引数によって上書きすることが可能です。これはディレクティブのコントローラーの$transclude引数と同じです。子要素がリンクされた後に実行されます。DOM変換は安全に行うことは出来ません。子要素がリンクされた後に実行されます。post-linking関数内ではDOM変換は安全に行うことが出来ます。link()またはcompile()関数内で引数として渡されます。これには様々な用途があります。正規化された属性名へのアクセスです。'ngBind'のようなディレクティブは、'ng:bind'、data-ng-bind、'x-ng-bind'のような多くの方法で表現することが可能です。属性オブジェクトは、正規化された属性へのアクセスを可能にしてくれます。属性オブジェクトの同じインスタンスを共有します。補完のサポート属性の補完は、他のディレクティブが補完された値を読み込むことを許可する属性オブジェクトを割り当てます。補完属性の監視$observeは、補完が含まれる属性の値変更を監視します。簡単に実際の値を取得する唯一の方法でもあります。});}下記は$compileProviderを使用した例になります。一般的にディレクティブはmodule.directiveを使用して登録されます。下記の例は、$compileの動作方法を説明するためのものです。説明element型:string、DOM要素template関数でコンパイルされる要素またはHTML文字列です。cloneAttachFn]ディレクティブで利用可能な関数です。cloneAttachFn])スコープにテンプレート(DOM要素/ツリー)を紐付けるのに使用されるlink関数です。紐付けるスコープを指定します。cloneAttachFn関数を呼び出して、呼び出し元に複製された要素を適切な場所でDOM要素に割り当てる事を可能にしてくれます。cloneAttachFnは次のようにして呼び出されます。コンパイラへ渡された元の要素の複製です。リンク関数が動作するカレントのスコープです。リンク関数の呼び出すと、テンプレートの要素を返します。これは渡された元の要素、またはcloneAttachFnが提供されていれば複製された要素のどちらかになります。リンクされた後は、ビューは通常Angularによって自動的に実行される$digestが呼ばれるまで、更新されることはありません。コンパイラへそれらを送信してこの参照周りを保持する前にDOM要素を作成します。複製を指し示すことをしません。この場合、cloneAttachFnを介して複製にアクセスすることが可能です。AngularのデベロッパーガイドのHTMLコンパイラを参照してください。3.0.このページは、ページトップのリンク先のAngularJS公式ドキュメント内のページを翻訳した内容を基に構成されています。下記の項目を確認し、必要に応じて公式のドキュメントをご確認ください。@tomofまで教えていただければ幸いです。AngularJSの更新頻度が高いため、元のコンテンツと比べてドキュメントの情報が古くなっている可能性があります。"訳注:"などの断わりを入れた上で、日本人向けの情報やより分かり易くするための追記を行っている事があります。