fix(core): support ngFor
that has an ngIf
as last node
Fixes #6304 Closes #6878
This commit is contained in:
@ -338,6 +338,27 @@ function _flattenNestedViewRenderNodes(nodes: any[], renderNodes: any[]): any[]
|
||||
return renderNodes;
|
||||
}
|
||||
|
||||
export function findLastRenderNode(node: any): any {
|
||||
var lastNode;
|
||||
if (node instanceof AppElement) {
|
||||
var appEl = <AppElement>node;
|
||||
lastNode = appEl.nativeElement;
|
||||
if (isPresent(appEl.nestedViews)) {
|
||||
// Note: Views might have no root nodes at all!
|
||||
for (var i = appEl.nestedViews.length - 1; i >= 0; i--) {
|
||||
var nestedView = appEl.nestedViews[i];
|
||||
if (nestedView.rootNodesOrAppElements.length > 0) {
|
||||
lastNode = findLastRenderNode(
|
||||
nestedView.rootNodesOrAppElements[nestedView.rootNodesOrAppElements.length - 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
lastNode = node;
|
||||
}
|
||||
return lastNode;
|
||||
}
|
||||
|
||||
export function checkSlotCount(componentName: string, expectedSlotCount: number,
|
||||
projectableNodes: any[][]): void {
|
||||
var givenSlotCount = isPresent(projectableNodes) ? projectableNodes.length : 0;
|
||||
|
@ -9,7 +9,7 @@ import {
|
||||
import {isPresent, isBlank, isArray} from 'angular2/src/facade/lang';
|
||||
import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
|
||||
import {BaseException} from 'angular2/src/facade/exceptions';
|
||||
import {AppView, HostViewFactory, flattenNestedViewRenderNodes} from './view';
|
||||
import {AppView, HostViewFactory, flattenNestedViewRenderNodes, findLastRenderNode} from './view';
|
||||
import {AppElement} from './element';
|
||||
import {ElementRef, ElementRef_} from './element_ref';
|
||||
import {
|
||||
@ -344,12 +344,7 @@ export class AppViewManager_ extends AppViewManager {
|
||||
refNode = vcAppElement.nativeElement;
|
||||
}
|
||||
if (isPresent(refNode)) {
|
||||
var refRenderNode;
|
||||
if (refNode instanceof AppElement) {
|
||||
refRenderNode = (<AppElement>refNode).nativeElement;
|
||||
} else {
|
||||
refRenderNode = refNode;
|
||||
}
|
||||
var refRenderNode = findLastRenderNode(refNode);
|
||||
view.renderer.attachViewAfter(refRenderNode,
|
||||
flattenNestedViewRenderNodes(view.rootNodesOrAppElements));
|
||||
}
|
||||
|
Reference in New Issue
Block a user