2013-04-30 12 views
9

は次のようにHTMLの構造を考えます親はボディであり、oneの場合のように動作せず、空のセットを返します。アクセス親要素(ボディ)

app.directive 'myDirective', -> 
    (scope,iElement,iAttrs) -> 
     console.log iElement.parent() 

EDIT:この問題に対する私の推測では、私のアプリの体は、クライアント側でレンダリングされ、モジュールのrunメソッドにbody要素に追加されていることです。 htmlは$('body').html($compile(body.render())($rootScope));で挿入されています。内容が本体に挿入される前に$ compile関数内でディレクティブが呼び出されたとします。この問題を回避することはできますか?

+3

は期待通りに動作するようです:http://jsfiddle.net/mTNvq/ – Langdon

+0

奇妙なこと今、私は問題の可能性のある手がかりをいくつか持っています。 – olanod

+2

[$ evalAsync](http://docs.angularjs.org/api/ng.$ro​​otScope.Scope#$evalAsync)を使用してみてください(Angular DOM操作の後で、ブラウザのレンダリングの前にAngularダイジェストサイクル後に実行します)。または[ $ timeout](http://docs.angularjs.org/api/ng.$timeout)(ブラウザのレンダリング後に実行されます) –

答えて

0

実際にあなたの問題は正しく理解されています。$compileは、要素のテンプレートのコンパイルとリンクフェーズをトリガーします。したがって、その間に親はありません。

修正する簡単な方法は、最初にあなたのHTMLを本文に追加することです。そして次にをコンパイルします。

var html = body.render(); 
$('body').html(html); 
$compile(angular.element(body))($rootScope); 

それとも、体全体をコンパイルしたくない場合は、単に新しい要素:

var elem = $(body.render()).appendTo($('body')); 
$compile(elem)($rootScope); 
関連する問題