9

次のような HTML 構造があるとします。

<body>
    <div id="one" my-directive></div>
    <div>
        <div id="two" my-directive></div>
    </div>
</body>

の親要素にアクセスしようとするtwoと動作し、ログは親 div を返しますが、親が本体のone場合、動作せず、空のセットを返します。

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

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

4

1 に答える 1

0

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

これを修正する簡単な方法は、最初に HTML を本文に追加してからコンパイルすることです。

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

または、本体全体をコンパイルするのではなく、新しい要素だけをコンパイルする場合:

var elem = $( body.render() ).appendTo($('body'));
$compile(elem)($rootScope);
于 2015-04-15T18:10:05.870 に答える