0

Angular ディレクティブの作成を始めたばかりですが (フレームワークも初めてです)、ネストされたディレクティブが無視されるように見える問題に遭遇しています。私のディレクティブのコードの基礎は、UI Bootstrap の「タブ」および「ペイン」ディレクティブです。

要点は、「レイアウト」内の「コンポーネント」のリストをコンパイルできるようにしたいということです。最終的には、既知のテンプレートの場所からコンテンツをレンダリングするようにレイアウトに指示する各「コンポーネント」タグにも属性が必要です。ただし、今のところ、テンプレートに 2 つのコンポーネントがあるにもかかわらず、コンポーネント ディレクティブ内の「リンク」関数を起動することさえできません。

ここに私の状況があります:

http://plnkr.co/edit/K4n2Mx3kZyvVYGDyJ7t9

4

2 に答える 2

0

ng-repeat を使用すると、新しいスコープが作成され、トランスクルージョンを挿入するための適切なスコープに ng-transclude が含まれなくなります。

したがって、ng-repeat を削除すると、レンダリングされたコンポーネントが得られます。

ここで、レイアウトを制御するために、スコープで行うように要素をコントローラーに追加し、コントローラーで適切にレイアウトすることができます。

// inside the controller
this.addComponentElement = function (componentElement) {
  componentElements.push(componentElement);
};
// watch for array changes and handle layout

または、コンパイル + リンクの組み合わせでトランスクルード関数を使用して、トランスクルードされた DOM への参照を取得し、そのレイアウトを操作できます。

  compile:function(telement, tAttrs, transcludeFn){
    return function(scope, element, attrs){
      transcludeFn(scope, function(transcludedDom){
        // layout the transcludedDom
      })
    }
于 2013-05-03T23:42:41.457 に答える