diff --git a/ionic/components/nav/nav-controller.ts b/ionic/components/nav/nav-controller.ts index 741057eda4..c88f461697 100644 --- a/ionic/components/nav/nav-controller.ts +++ b/ionic/components/nav/nav-controller.ts @@ -1,4 +1,4 @@ -import {Compiler, ElementRef, Injector, provide, NgZone, DynamicComponentLoader, AppViewManager, Renderer} from 'angular2/angular2'; +import {Compiler, ElementRef, Injector, provide, NgZone, AppViewManager, Renderer} from 'angular2/angular2'; import {wtfLeave, wtfCreateScope} from 'angular2/angular2'; import {Ion} from '../ion'; @@ -107,7 +107,6 @@ export class NavController extends Ion { keyboard: Keyboard, elementRef: ElementRef, compiler: Compiler, - loader: DynamicComponentLoader, viewManager: AppViewManager, zone: NgZone, renderer: Renderer @@ -120,7 +119,6 @@ export class NavController extends Ion { this.keyboard = keyboard; this._compiler = compiler; - this._loader = loader; this._viewManager = viewManager; this._zone = zone; this._renderer = renderer; @@ -793,23 +791,34 @@ export class NavController extends Ion { loadPage(viewCtrl, navbarContainerRef, opts, done) { let wtfScope = wtfCreateScope('NavController#loadPage()')(); - let providers = this.providers.concat(Injector.resolve([ - provide(ViewController, {useValue: viewCtrl}), - provide(NavParams, {useValue: viewCtrl.params}) - ])); + // guts of DynamicComponentLoader#loadIntoLocation + this._compiler.compileInHost(viewCtrl.componentType).then(hostProtoViewRef => { + let providers = this.providers.concat(Injector.resolve([ + provide(ViewController, {useValue: viewCtrl}), + provide(NavParams, {useValue: viewCtrl.params}) + ])); - this._loader.loadIntoLocation(viewCtrl.componentType, this.elementRef, 'contents', providers).then(componentRef => { + let location = this._viewManager.getNamedElementInComponentView(this.elementRef, 'contents'); + + let viewContainer = this._viewManager.getViewContainer(location); + let hostViewRef = + viewContainer.createHostView(hostProtoViewRef, viewContainer.length, providers); + let newLocation = this._viewManager.getHostElement(hostViewRef); + let component = this._viewManager.getComponent(newLocation); viewCtrl.addDestroy(() => { - componentRef.dispose(); + let index = viewContainer.indexOf(hostViewRef); + if (index !== -1) { + viewContainer.remove(index); + } }); // a new ComponentRef has been created // set the ComponentRef's instance to this ViewController - viewCtrl.setInstance(componentRef.instance); + viewCtrl.setInstance(component); // remember the ElementRef to the ion-page elementRef that was just created - viewCtrl.setPageRef(componentRef.location); + viewCtrl.setPageRef(newLocation); if (!navbarContainerRef) { navbarContainerRef = viewCtrl.getNavbarViewRef(); diff --git a/ionic/components/nav/nav.ts b/ionic/components/nav/nav.ts index bf69f5210d..ff429f396c 100644 --- a/ionic/components/nav/nav.ts +++ b/ionic/components/nav/nav.ts @@ -1,4 +1,4 @@ -import {Component, Directive, ElementRef, Host, Optional, forwardRef, Inject, NgZone, Compiler, AppViewManager, DynamicComponentLoader, Renderer, ViewContainerRef} from 'angular2/angular2'; +import {Component, Directive, ElementRef, Host, Optional, forwardRef, Inject, NgZone, Compiler, AppViewManager, Renderer, ViewContainerRef} from 'angular2/angular2'; import {IonicApp} from '../app/app'; import {Config} from '../../config/config'; @@ -117,13 +117,11 @@ export class Nav extends NavController { keyboard: Keyboard, elementRef: ElementRef, compiler: Compiler, - loader: DynamicComponentLoader, viewManager: AppViewManager, zone: NgZone, renderer: Renderer ) { - super(hostNavCtrl, app, config, keyboard, elementRef, compiler, - loader, viewManager, zone, renderer); + super(hostNavCtrl, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer); if (viewCtrl) { // an ion-nav can also act as an ion-page within a parent ion-nav diff --git a/ionic/components/overlay/overlay.ts b/ionic/components/overlay/overlay.ts index 19d11356c3..fa84dd54b2 100644 --- a/ionic/components/overlay/overlay.ts +++ b/ionic/components/overlay/overlay.ts @@ -1,4 +1,4 @@ -import {Component, ElementRef, Compiler, DynamicComponentLoader, AppViewManager, NgZone, Renderer} from 'angular2/angular2'; +import {Component, ElementRef, Compiler, AppViewManager, NgZone, Renderer} from 'angular2/angular2'; import {IonicApp} from '../app/app'; import {Config} from '../../config/config'; @@ -20,13 +20,11 @@ export class OverlayNav extends NavController { keyboard: Keyboard, elementRef: ElementRef, compiler: Compiler, - loader: DynamicComponentLoader, viewManager: AppViewManager, zone: NgZone, renderer: Renderer ) { - super(null, app, config, keyboard, elementRef, compiler, - loader, viewManager, zone, renderer); + super(null, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer); if (overlayCtrl.anchor) { throw ('An app should only have one '); diff --git a/ionic/components/tabs/tab.ts b/ionic/components/tabs/tab.ts index da60f9379f..8f255c6fa7 100644 --- a/ionic/components/tabs/tab.ts +++ b/ionic/components/tabs/tab.ts @@ -1,4 +1,4 @@ -import {Component, Directive, Host, ElementRef, Compiler, DynamicComponentLoader, AppViewManager, NgZone, Renderer} from 'angular2/angular2'; +import {Component, Directive, Host, ElementRef, Compiler, AppViewManager, NgZone, Renderer} from 'angular2/angular2'; import {IonicApp} from '../app/app'; import {Config} from '../../config/config'; @@ -76,14 +76,12 @@ export class Tab extends NavController { keyboard: Keyboard, elementRef: ElementRef, compiler: Compiler, - loader: DynamicComponentLoader, viewManager: AppViewManager, zone: NgZone, renderer: Renderer ) { // A Tab is a NavController for its child pages - super(parentTabs, app, config, keyboard, elementRef, compiler, - loader, viewManager, zone, renderer); + super(parentTabs, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer); this._isInitial = parentTabs.add(this);