aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanilsomsikov2013-01-22 16:59:09 +0100
committerIgor Minar2013-02-25 21:45:44 -0800
commit77c4a7fd660c2520afc7a0fdcf81c8950321f559 (patch)
treee74f1ea7707f4e1d67ad8258001235c8ff537150
parente281413919db26dbb0cc1d4b892d22fd0475fb68 (diff)
downloadangular.js-77c4a7fd660c2520afc7a0fdcf81c8950321f559.tar.bz2
fix($compile): compile replace directives in external template
Passing DOMNode#childNodes to compileNodes when compiling remote template, so that directives with replace:true can be compiled. The previous version used jqLite#contents which returned collection that was not updated during the compilation. Closes #1859
-rw-r--r--src/ng/compile.js6
-rw-r--r--test/ng/compileSpec.js29
2 files changed, 32 insertions, 3 deletions
diff --git a/src/ng/compile.js b/src/ng/compile.js
index eb92830d..a59c8012 100644
--- a/src/ng/compile.js
+++ b/src/ng/compile.js
@@ -358,7 +358,7 @@ function $CompileProvider($provide) {
function compile($compileNodes, transcludeFn, maxPriority) {
if (!($compileNodes instanceof jqLite)) {
- // jquery always rewraps, where as we need to preserve the original selector so that we can modify it.
+ // jquery always rewraps, whereas we need to preserve the original selector so that we can modify it.
$compileNodes = jqLite($compileNodes);
}
// We can not compile top level text elements since text nodes can be merged and we will
@@ -410,7 +410,7 @@ function $CompileProvider($provide) {
* functions return values - the linking functions - are combined into a composite linking
* function, which is the a linking function for the node.
*
- * @param {NodeList} nodeList an array of nodes to compile
+ * @param {NodeList} nodeList an array of nodes or NodeList to compile
* @param {function(angular.Scope[, cloneAttachFn]} transcludeFn A linking function, where the
* scope argument is auto-generated to the new child of the transcluded parent scope.
* @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then the
@@ -992,7 +992,7 @@ function $CompileProvider($provide) {
directives.unshift(derivedSyncDirective);
afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn);
- afterTemplateChildLinkFn = compileNodes($compileNode.contents(), childTranscludeFn);
+ afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
while(linkQueue.length) {
diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js
index 163eefba..d24a9dac 100644
--- a/test/ng/compileSpec.js
+++ b/test/ng/compileSpec.js
@@ -702,6 +702,10 @@ describe('$compile', function() {
}
}));
+ directive('replace', valueFn({
+ replace: true,
+ template: '<span>Hello, {{name}}!</span>'
+ }));
}
));
@@ -817,6 +821,31 @@ describe('$compile', function() {
));
+ it('should compile template when replacing element in another template',
+ inject(function($compile, $templateCache, $rootScope) {
+ $templateCache.put('hello.html', '<div replace></div>');
+ $rootScope.name = 'Elvis';
+ element = $compile('<div><b class="hello"></b></div>')($rootScope);
+
+ $rootScope.$digest();
+
+ expect(sortedHtml(element)).
+ toEqual('<div><b class="hello"><span replace="">Hello, Elvis!</span></b></div>');
+ }));
+
+
+ it('should compile template when replacing root element',
+ inject(function($compile, $templateCache, $rootScope) {
+ $rootScope.name = 'Elvis';
+ element = $compile('<div replace></div>')($rootScope);
+
+ $rootScope.$digest();
+
+ expect(sortedHtml(element)).
+ toEqual('<span replace="">Hello, Elvis!</span>');
+ }));
+
+
it('should resolve widgets after cloning in append mode', function() {
module(function($exceptionHandlerProvider) {
$exceptionHandlerProvider.mode('log');