diff options
| author | Martin Probst | 2013-01-08 20:11:51 +0100 | 
|---|---|---|
| committer | Igor Minar | 2013-01-09 20:06:22 -0800 | 
| commit | cdf6fb19c85560b30607e71dc2b19fde54760faa (patch) | |
| tree | 031f53d0850ccd1f5cec38f1ed1f7bd04e7cc1ab /src | |
| parent | c909f491125d4c846782cf4d5d98bb366aec8c3f (diff) | |
| download | angular.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')
| -rw-r--r-- | src/ng/compile.js | 12 | 
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++];  | 
