aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/compile.js
diff options
context:
space:
mode:
authorMartin Probst2013-01-08 20:11:51 +0100
committerIgor Minar2013-01-09 20:06:22 -0800
commitcdf6fb19c85560b30607e71dc2b19fde54760faa (patch)
tree031f53d0850ccd1f5cec38f1ed1f7bd04e7cc1ab /src/ng/compile.js
parentc909f491125d4c846782cf4d5d98bb366aec8c3f (diff)
downloadangular.js-cdf6fb19c85560b30607e71dc2b19fde54760faa.tar.bz2
feat($compile): support modifying the DOM structure in postlink fn
Support modifying the DOM structure in the post link function of a directive by creating a defensive copy of the node list, as opposed to a live DOM list. This is useful for directives to actually replace their entire DOM fragment, e.g. with the HTML fragment generated by a 3rd party component (Closure, Bootstrap ...). Fix the indentation of the compileNodes function (was one too little).
Diffstat (limited to 'src/ng/compile.js')
-rw-r--r--src/ng/compile.js12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/ng/compile.js b/src/ng/compile.js
index 0e7becaf..5026283e 100644
--- a/src/ng/compile.js
+++ b/src/ng/compile.js
@@ -394,10 +394,16 @@ function $CompileProvider($provide) {
return linkFnFound ? compositeLinkFn : null;
function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) {
- var nodeLinkFn, childLinkFn, node, childScope, childTranscludeFn;
+ var nodeLinkFn, childLinkFn, node, childScope, childTranscludeFn, i, ii, n;
- for(var i = 0, n = 0, ii = linkFns.length; i < ii; n++) {
- node = nodeList[n];
+ // copy nodeList so that linking doesn't break due to live list updates.
+ var stableNodeList = [];
+ for (i = 0, ii = nodeList.length; i < ii; i++) {
+ stableNodeList.push(nodeList[i]);
+ }
+
+ for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) {
+ node = stableNodeList[n];
nodeLinkFn = linkFns[i++];
childLinkFn = linkFns[i++];