[解決済み】ディレクティブ定義のtranscludeオプションの理解?
質問
Angularjsのディレクティブで一番理解しにくいコンセプトの一つだと思うのですが。
からのドキュメントは http://docs.angularjs.org/guide/directive は言う。
トランスクルード - 要素の内容をコンパイルし、ディレクティブが利用できるようにします。一般的に ngTransclude と共に使用されます。トランスクルードの利点は、リンク関数が正しいスコープにあらかじめバインドされたトランスクルード関数を受け取ることです。典型的な設定では、ウィジェットはアイソレートスコープを作成しますが、トランスクルードは子ではなく、アイソレートスコープの兄弟になります。これにより、ウィジェットがプライベートな状態を持ち、トランスクルージョンが親(分離前の)スコープにバインドされることが可能になります。
- true - ディレクティブの内容をトランスクルードします。
- 'element' - 優先順位の低いディレクティブも含めて、要素全体を転置します。
それは、以下の通りです。
transclude
と一緒に使うのが一般的です。
ngTransclude
. しかし、doc のサンプルは
ngTransclude
は使用しません。
ngTransclude
ディレクティブは一切使用しません。
これを理解するために、良い例が欲しいです。なぜそれが必要なのでしょうか?何を解決するのか?どのように使うのか?
どのように解決するのか?
というディレクティブを考えてみましょう。 myDirective の中にあって、その要素が他のコンテンツを囲んでいるとします。
<div my-directive>
<button>some button</button>
<a href="#">and a link</a>
</div>
もし
myDirective
がテンプレートを使っている場合、その中身は
<div my-directive>
は、ディレクティブテンプレートに置き換えられます。だから、持つこと。
app.directive('myDirective', function(){
return{
template: '<div class="something"> This is my directive content</div>'
}
});
を実行すると、このようなレンダリングになります。
<div class="something"> This is my directive content</div>
元の要素の内容
<div my-directive>
は失われます
(ということになります(というより、置き換えてください)。だから、この仲間にサヨナラしてください。
<button>some button</button>
<a href="#">and a link</a>
では、もしあなたが
<button>...
と
<a href>...
をDOMに入れるのですか?トランスクルージョンと呼ばれるものが必要です。コンセプトはとてもシンプルです。
ある場所から別の場所にコンテンツを含める
. これで、あなたのディレクティブは次のようになります。
app.directive('myDirective', function(){
return{
transclude: true,
template: '<div class="something"> This is my directive content</div> <ng-transclude></ng-transclude>'
}
});
これでレンダリングされる。
<div class="something"> This is my directive content
<button>some button</button>
<a href="#">and a link</a>
</div>.
結論から言うと、基本的にはディレクティブを使っているときに、要素の内容を保持したい場合にtranscludeを使います。
関連
-
[解決済み] プリフライト応答が成功しない
-
[解決済み] Angular ng-repeat エラー "リピータ内の重複は許可されません。"
-
[解決済み] Angular ng-repeatの条件付きラップアイテム(ng-repeatのグループアイテム)。
-
[解決済み] AngularJS の ng-disabled ディレクティブに式を指定しても動作しない
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
AngularJS がエラー $digest already in progress を報告する
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング
-
[解決済み】AngularJSのディレクティブスコープにおける「@」と「=」の違いは何ですか?
-
[解決済み】AngularJSでディレクティブを書くとき、新しいスコープ、新しい子スコープ、または新しい分離されたスコープが必要であるかどうかは、どのように決定するのですか?
-
[解決済み] Angularでtransclude 'true'とtransclude 'element'を使用するタイミングは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】npm UNMET PEER DEPENDENCYの警告を修正するにはどうすればいいですか?
-
[解決済み】Angularjs accordion ng-click on panel-header
-
[解決済み] AngularJSで$httpリクエスト中にスピナーGIFを表示する?
-
[解決済み] X-Frame-Options'を'SAMEORIGIN'に設定しているため、フレーム内での表示を拒否された。
-
[解決済み] select 要素のデフォルト値を設定するための ng-option の使用方法
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] どのようにangularJSでrouteProviderとlocationProviderを設定するのですか?
-
[解決済み] AngularJS : ローカルストレージを使用する
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] AngularJSのng-repeatでキーと値を反復処理する方法は?