2013-05-22 8 views
5

私はテンプレート/ templateURLに適用できますが、現在、コンテンツはアプリケーションの別の場所から読み込まれます。ajaxコンテンツへの角度js指示の適用方法は?

JSbin:http://jsbin.com/imuseb/1/

HTML

<html ng-app="app"> 
    <head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script> 

    </head> 
    <body> 

    <div alert>here</div> 

    </body> 
</html> 

JSコード:

var app = angular.module('app', []); 

app.directive('alert', function(){ 
    return { 
    link: function (scope, element, attrs) { 
     element.on("click", function(){ 
     alert("here"); 
     }); 
    } 
    }; 
}); 


$(function(){ 
    $("body").append("<div alert>here too</div>"); 
}); 
+0

これまでに何を試みましたか?いくつかのサンプルコードを提供できますか? – tschiela

+0

いくつかのコードが追加されました... –

答えて

3

正しくコンパイルするには、新しいアプリケーションが角型アプリケーションにアクセスできる必要があります。これを行うための1つの方法があります(唯一の方法ではありません)。アプリの$rootScopeに新しいDOMを適用するために、これを変更:

$(function(){ 
    $("body").append("<div alert>here too</div>"); 
}); 

へ:

app.run(function($rootScope){ 
    $rootScope.$apply($("body").append("<div editable>here too</div>")); 
}); 

Angular docsによると:

$適用()に使用されています角度フレームワークの外側から角度のある式を実行します。 (たとえば、ブラウザのDOMイベント、setTimeout、XHR、または第三者のライブラリから)。

+3

ありがとうsh0ber。 $ compile($ body( "body")。append( "

here too
"))($ scope);このように$ compileを使うこともできます。 –

+0

'app.run()'の文脈で$ applyと$ compileを使うことの違いは何ですか?ありがとう – RPDeshaies

0

あなたは、角フレームワークの中から、あなたの余分なコンテンツを読み込むことができればそれがベストでしょう。 ng-includeをチェックしてください。

これを使用して必要な作業を行うことができない場合は、要素の角度コンパイルサービスを手動で呼び出してコンパイルし、$compileを使用してスコープにリンクする必要があります。

コンパイル要素はDOMに触れるため、可能であればカスタムディレクティブ内で実行する必要があります。

関連する問題