mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix($compile): fix replaceWith
the old implementation didn't reattach jquery/jqlite data which caused things like to be lost I tried various implementations but it appears that by reattaching the data to the new node by copying the expando property is the most reliable of all.
This commit is contained in:
parent
a44d3dcd6a
commit
b431ee3850
2 changed files with 7 additions and 13 deletions
|
|
@ -75,7 +75,7 @@
|
|||
*/
|
||||
|
||||
var jqCache = {},
|
||||
jqName = 'ng-' + new Date().getTime(),
|
||||
jqName = JQLite.expando = 'ng-' + new Date().getTime(),
|
||||
jqId = 1,
|
||||
addEventListenerFn = (window.document.addEventListener
|
||||
? function(element, type, fn) {element.addEventListener(type, fn, false);}
|
||||
|
|
|
|||
|
|
@ -867,22 +867,12 @@ function $CompileProvider($provide) {
|
|||
linkRootElement = linkQueue.pop(),
|
||||
origLinkNode = linkQueue.pop(),
|
||||
scope = linkQueue.pop(),
|
||||
linkNode = compileNode,
|
||||
$origLinkNode = jqLite(origLinkNode);
|
||||
linkNode = compileNode;
|
||||
|
||||
if (origLinkNode !== origCompileNode) {
|
||||
// it was cloned therefore we have to clone as well.
|
||||
linkNode = JQLiteClone(compileNode);
|
||||
replaceWith(linkRootElement, $origLinkNode, linkNode);
|
||||
}
|
||||
|
||||
if (replace) {
|
||||
if ($origLinkNode.data('$scope')) {
|
||||
// if the original element before replacement had a new scope, the replacement should
|
||||
// get it as well
|
||||
jqLite(linkNode).data('$scope', scope);
|
||||
}
|
||||
dealoc($origLinkNode);
|
||||
replaceWith(linkRootElement, jqLite(origLinkNode), linkNode);
|
||||
}
|
||||
|
||||
afterTemplateNodeLinkFn(function() {
|
||||
|
|
@ -992,12 +982,16 @@ function $CompileProvider($provide) {
|
|||
for(i = 0, ii = $rootElement.length; i < ii; i++) {
|
||||
if ($rootElement[i] == oldNode) {
|
||||
$rootElement[i] = newNode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
parent.replaceChild(newNode, oldNode);
|
||||
}
|
||||
|
||||
newNode[jqLite.expando] = oldNode[jqLite.expando];
|
||||
$element[0] = newNode;
|
||||
}
|
||||
}];
|
||||
|
|
|
|||
Loading…
Reference in a new issue