Skip to content

Instantly share code, notes, and snippets.

@rageandqq
Last active February 13, 2017 19:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rageandqq/8feeb27011ce46eed867 to your computer and use it in GitHub Desktop.
Save rageandqq/8feeb27011ce46eed867 to your computer and use it in GitHub Desktop.
Angular Recursive Directive compiler
.factory('RecursionHelper', ['$compile', function($compile) {
return {
//Manually compiles the element, fixing the recursion loop.
compile: function(element, link) {
// Normalize the link parameter
if (angular.isFunction(link)) {
link = {
post: link
};
}
// Break the recursion loop by removing the contents
var contents = element.contents().remove();
var compiledContents;
return {
pre: (link && link.pre) ? link.pre : null
, /**
* Compiles and re-adds the contents
*/
post: function(scope, element) {
// Compile the contents
if (!compiledContents) {
compiledContents = $compile(contents);
}
// Re-add the compiled contents to the element
compiledContents(scope, function(clone) {
element.append(clone);
});
// Call the post-linking function, if any
if (link && link.post) {
link.post.apply(null, arguments);
}
}
};
}
};
}
/* USAGE */
compile: function(elem) {
return RecursionHelper.compile(elem);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment