Skip to content

Commit 116b64d

Browse files
committed
fix(view_manager): allow to create host views even if there is an embedded view at the same place.
1 parent b785503 commit 116b64d

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

modules/angular2/src/core/compiler/view_manager.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ export class AppViewManager {
188188

189189
var embeddedFragmentView = contextView.getNestedView(contextBoundElementIndex);
190190
var view;
191-
if (isPresent(embeddedFragmentView) && !embeddedFragmentView.hydrated()) {
191+
if (protoView.type === ViewType.EMBEDDED && isPresent(embeddedFragmentView) &&
192+
!embeddedFragmentView.hydrated()) {
192193
// Case 1: instantiate the first view of a template that has been merged into a parent
193194
view = embeddedFragmentView;
194195
this._attachRenderView(parentView, boundElementIndex, atIndex, view);

modules/angular2/test/core/compiler/view_manager_spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,22 @@ export function main() {
300300

301301
});
302302

303+
describe('create a host view', () => {
304+
305+
it('should always create a new view and not use the embedded view', () => {
306+
var newHostPv = createHostPv([createNestedElBinder(createComponentPv())]);
307+
var newHostView =
308+
internalView(manager.createViewInContainer(vcRef, 0, wrapPv(newHostPv), null));
309+
expect(newHostView.proto).toBe(newHostPv);
310+
expect(newHostView).not.toBe(hostView.views[2]);
311+
expect(viewListener.spy('viewCreated')).toHaveBeenCalledWith(newHostView);
312+
expect(renderer.spy('createView'))
313+
.toHaveBeenCalledWith(newHostPv.mergeMapping.renderProtoViewRef,
314+
newHostPv.mergeMapping.renderFragmentCount);
315+
});
316+
317+
});
318+
303319
});
304320
});
305321

0 commit comments

Comments
 (0)