From eb53423a41136fcda0c5e711f2d104952080354b Mon Sep 17 00:00:00 2001 From: Luis Ramón López Date: Thu, 21 Feb 2013 21:56:40 +0100 Subject: feat($compile): support for dynamic template generation `template` and `templateUrl` properties can now be optionally defined via a function. This allows templates to be dynamically generated on the fly. --- src/ng/compile.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/ng') diff --git a/src/ng/compile.js b/src/ng/compile.js index 3746bb66..c04d3871 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -652,9 +652,14 @@ function $CompileProvider($provide) { } } - if ((directiveValue = directive.template)) { + if (directive.template) { assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; + + directiveValue = (isFunction(directive.template)) + ? directive.template($compileNode, templateAttrs) + : directive.template; + directiveValue = denormalizeTemplate(directiveValue); if (directive.replace) { @@ -977,11 +982,14 @@ function $CompileProvider($provide) { // The fact that we have to copy and patch the directive seems wrong! derivedSyncDirective = extend({}, origAsyncDirective, { controller: null, templateUrl: null, transclude: null, scope: null - }); + }), + templateUrl = (isFunction(origAsyncDirective.templateUrl)) + ? origAsyncDirective.templateUrl($compileNode, tAttrs) + : origAsyncDirective.templateUrl; $compileNode.html(''); - $http.get(origAsyncDirective.templateUrl, {cache: $templateCache}). + $http.get(templateUrl, {cache: $templateCache}). success(function(content) { var compileNode, tempTemplateAttrs, $template; -- cgit v1.2.3