fix(injectors): sync injector tree with dom element tree.
Changes adds createGrowableSize method to allow for growable lists with fixed start. Closes: #2498
This commit is contained in:
@ -1027,7 +1027,8 @@ export class ElementInjector extends TreeNode<ElementInjector> {
|
||||
if (queryRef.query.descendants == false) {
|
||||
if (this == queryRef.originator) {
|
||||
this._addQueryToTreeSelfAndRecurse(queryRef);
|
||||
} else if (this.parent == queryRef.originator && this._proto.distanceToParent == 1) {
|
||||
// TODO(rado): add check for distance to parent = 1 when issue #2707 is fixed.
|
||||
} else if (this.parent == queryRef.originator) {
|
||||
this._assignQueryRef(queryRef);
|
||||
}
|
||||
} else {
|
||||
|
@ -86,6 +86,7 @@ export class AppViewManagerUtils {
|
||||
this._hydrateView(hostView, injector, null, new Object(), null);
|
||||
}
|
||||
|
||||
// Misnomer: this method is attaching next to the view container.
|
||||
attachViewInContainer(parentView: viewModule.AppView, boundElementIndex: number,
|
||||
contextView: viewModule.AppView, contextBoundElementIndex: number,
|
||||
atIndex: number, view: viewModule.AppView) {
|
||||
@ -104,7 +105,11 @@ export class AppViewManagerUtils {
|
||||
}
|
||||
var elementInjector = contextView.elementInjectors[contextBoundElementIndex];
|
||||
for (var i = view.rootElementInjectors.length - 1; i >= 0; i--) {
|
||||
view.rootElementInjectors[i].linkAfter(elementInjector, sibling);
|
||||
if (isPresent(elementInjector.parent)) {
|
||||
view.rootElementInjectors[i].linkAfter(elementInjector.parent, sibling);
|
||||
} else {
|
||||
contextView.rootElementInjectors.push(view.rootElementInjectors[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,7 +120,13 @@ export class AppViewManagerUtils {
|
||||
view.changeDetector.remove();
|
||||
ListWrapper.removeAt(viewContainer.views, atIndex);
|
||||
for (var i = 0; i < view.rootElementInjectors.length; ++i) {
|
||||
view.rootElementInjectors[i].unlink();
|
||||
var inj = view.rootElementInjectors[i];
|
||||
if (isPresent(inj.parent)) {
|
||||
inj.unlink();
|
||||
} else {
|
||||
var removeIdx = ListWrapper.indexOf(parentView.rootElementInjectors, inj);
|
||||
ListWrapper.removeAt(parentView.rootElementInjectors, removeIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user