2013-05-22 9 views
5

Wiem, że mogę zgłosić się do szablonu/szablonuURL, ale obecnie treść zostanie załadowana z innego miejsca w mojej aplikacji.Jak zastosować dyrektywę kątową do treści ajax?

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> 

kod 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

Czego do tej pory próbowałeś? Czy możesz podać przykładowy kod? – tschiela

+0

jakiś kod dodany ... –

Odpowiedz

3

Nowy DOM musi być dostępny dla aplikacji kątowej, aby można ją było poprawnie skompilować. Oto jeden sposób na zrobienie tego (nie jedyny sposób). Dla zastosowania nowego modelu DOM do aplikacji $rootScope, zmień to:

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

do:

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

Według Angular docs:

$ apply() służy do wykonaj wyrażenie w kanciastym z poza ramy kątowej. (Na przykład ze zdarzeń DOM przeglądarki, setTimeout, XHR lub bibliotek stron trzecich).

+3

Dzięki sh0ber. Odkryłem, że możesz również użyć $ compile ... tak: $ compile ($ ("body") .endend ("

here too
")) ($ scope); –

+0

Jaka jest różnica między używaniem $ apply i $ compile w kontekście 'app.run()'? Dzięki – RPDeshaies

0

Byłoby najlepiej, jeśli można załadować dodatkową zawartość z wewnątrz ramy kątowej. Sprawdź ng-include.

Jeśli nie można tego zrobić, musisz ręcznie wywołać funkcję kątowej kompilacji na elemencie, skompilować ją i połączyć ją z osią samodzielnie za pomocą $compile.

Elementy kompilujące dotyka DOM, a zatem powinny być wykonane w ramach dyrektywy, jeśli to możliwe.

Powiązane problemy