问题
I really like how AngularJS enables custom tags/elements by allowing you to declare directives inside your app, however, when I append a custom tag dynamically, nothing happens:
angular.module('myApp', []).directive('test', (($compile) ->
restrict: 'E'
link: (scope, element, attributes) ->
$(element).html('<h1>this is a test!</h1>')
))
$('body').append('<test></test>')
How can I build an instance of my custom tag dynamically?
回答1:
Why are you calling jquery outside of angular? Normally you would do something from inside an angular directive for instance and that would have access to $compile. If you absolutely need access outside you can create an injector. (PLUNKER)
angular.module('myApp', []).directive('test', function($compile) {
return {
restrict: 'E',
link: function(scope, element, attributes) {
$(element).html('<h1>this is a test!</h1>')
}
}
});
///////////////////////////////////////////////////////////////////////////////
// called outside angular, you can create an injector that knows about
// certain modules
///////////////////////////////////////////////////////////////////////////////
$(function() {
// myApp for test directive to work, ng for $compile
var $injector = angular.injector(['ng', 'myApp']);
$injector.invoke(function($rootScope, $compile) {
$('body').prepend($compile('<test>Inside injector</test>')($rootScope));
});
});
来源:https://stackoverflow.com/questions/17073721/why-is-angular-js-not-smart-enough-to-compile-dom-when-adding-dynamic-elements