When I perform DOM manipulation (add new HTML) using jQuery, AngularJS doesn\'t automatically detect variables in the new HTML and replace them with their values. For exampl
If you use fragments for new elements (e.g. $("<" + "div>").appendTo("body")), using a wrapper like the following for the JQuery prepend/append methods lets you avoid having to change your element-adding code:
// run angular-compile command on new content
// (also works for prependTo/appendTo, since they use these methods internally)
var oldPrepend = $.fn.prepend;
$.fn.prepend = function()
{
var isFragment = arguments[0][0] && arguments[0][0].parentNode && arguments[0][0].parentNode.nodeName == "#document-fragment";
var result = oldPrepend.apply(this, arguments);
if (isFragment)
AngularCompile(arguments[0]);
return result;
};
var oldAppend = $.fn.append;
$.fn.append = function()
{
var isFragment = arguments[0][0] && arguments[0][0].parentNode && arguments[0][0].parentNode.nodeName == "#document-fragment";
var result = oldAppend.apply(this, arguments);
if (isFragment)
AngularCompile(arguments[0]);
return result;
};
function AngularCompile(root)
{
var injector = angular.element($('[ng-app]')[0]).injector();
var $compile = injector.get('$compile');
var $rootScope = injector.get('$rootScope');
var result = $compile(root)($rootScope);
$rootScope.$digest();
return result;
}