2016-05-12 7 views
1

ディレクティブ内にディレクティブがネストされています。私たちのデザイナーのニーズを満たすためには、コンテンツをDOMノードの直接の子にする必要があります。

<div> 
    <my-directive style="color: blue;"> 

     <p>Name: {{ ctl_a.fname }} {{ ctl_a.sname }}</p> 
     <p>External Test: {{ xternal }}</p> 

     <div> 
     <nested-directive incoming="ctl_a.a_counter"></nested-directive> 
     </div> 

    </my-directive> 
    </div> 

これを正しくロードするための最良の選択肢は何ですか? I.E "my-directive"はctl_a.fnameにアクセスでき、 "nested-directive"は "ctl_a.a_counter"によって引き渡された引数として$ scope.incomingにアクセスできます。

Here is a plunkこれは、私が$ compileを使用している問題を示しています。 $ compileを使用すると、ネストされたディレクティブは2回実行されます。外部ディレクティブをコンパイルするために1回、手動のコンパイルのためにもう一度コンパイルします。ひょっとすると、内容が正しく表示されるように見えるのは、手動のものだけです。

ng-transcludeを使用した場合、ng-transcludeは新しいスコープを作成するように見えるため、$$ prevSiblingまたは$ parentのプレフィックスを付けずに内部ディレクティブに渡される属性はありません。これは基本的にそれを参照するのが間違っているようです。

編集:ここはanother plunkで、最初のものをフォークします。今回は、ng-transcludeのデモンストレーションを行い、$ parentを使用して指令にコントローラにアクセスする必要があります。

ありがとうございました。

+0

なぜ、最終的にそれをコンパイルすれば、コンテンツをコンパイルするのはなぜですか?また、あなたの実際の質問は何か分かりません。 – zeroflagL

+0

_これを正しくロードするための最良の選択肢は何ですか?_と同様に、テンプレート変数が含まれているディレクティブのコンテキストで評価されるように、このマークアップを角度処理します。彼らは現在立っているので、角はこれらのようにコンパイルしないためです。 –

答えて

1

作業

$compile(element.contents())(scope); 

私はそれはあなたが知りたい、しかし、あなたはあなたのディレクティブ定義オブジェクトにterminal: trueを追加する必要がすべてだかはわかりません。これにより、Angularは自分でコンパイルするまでmy-directiveタグ内のHTMLを処理できなくなります。あなたのプランナーからの変更されたコード:

function myDirective($compile) { 
    var directive = { 
     compile: compile, 
     controller: controller, 
     controllerAs: 'ctl_a', 
     replace: true, 
     terminal:true, //<======= 
     restrict: 'E', 
     scope: { 
      data: '=' 
     } 
    }; 

    return directive; 
+0

これは私が必要とするものです。私は "ターミナル"について知らなかった。これにより、コンテンツをコンパイルしてヌル変数を与えるダイジェストループが停止します。本当にありがとう! –

+0

約10分前に、私はng-transcludeを使ってjavascriptの機能を利用してオブジェクトを参照してプロパティをアタッチする方法も見つけました。私は別の解決策として私の発見をここに掲載します。 –

0

my-directiveのデータプロパティを使用していないようです。 my-directiveから以下のコードを削除することができます。

scope:{ 
     data: '=' 
    } 

これで、以下のように手動でコンパイルする必要はありません。それもそれを削除します。 plunkr

+0

ありがとうございます。私はデータを使用していませんが、分離されたスコープが必要であることを示すデモンストレーション、そして私は物事を渡すでしょう。スコープの分離を取り除いたので、あなたの塊が働く唯一の理由があります。ここには、 "plunkr"(https://plnkr.co/edit/taxVe8OWTdNq1qDQb8jr?p=preview)があり、 "arg"と呼ばれる引数が注入されています。 –

関連する問題