From ee3de8a03d2f838561009968679d66dfc7e20c78 Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Sat, 27 Jun 2015 15:09:18 -0500 Subject: [PATCH] view-controller/item injector stuff --- ionic/components.js | 1 - ionic/components/nav/nav-controller.js | 8 ++++++++ ionic/components/nav/nav-params.js | 9 --------- ionic/components/nav/nav.js | 6 ++---- ionic/components/tabs/tab.js | 4 ---- ionic/components/tabs/tabs.js | 3 --- ionic/components/view/view-controller.js | 15 ++++++++++++--- ionic/components/view/view-item.js | 12 ++---------- 8 files changed, 24 insertions(+), 34 deletions(-) delete mode 100644 ionic/components/nav/nav-params.js diff --git a/ionic/components.js b/ionic/components.js index 367d24f329..7a9d7f4aad 100644 --- a/ionic/components.js +++ b/ionic/components.js @@ -15,7 +15,6 @@ export * from 'ionic/components/list/list' export * from 'ionic/components/modal/modal' export * from 'ionic/components/nav/nav' export * from 'ionic/components/nav/nav-controller' -export * from 'ionic/components/nav/nav-params' export * from 'ionic/components/nav/nav-push' export * from 'ionic/components/nav-bar/nav-bar' export * from 'ionic/components/slides/slides' diff --git a/ionic/components/nav/nav-controller.js b/ionic/components/nav/nav-controller.js index 235117189c..76509a2499 100644 --- a/ionic/components/nav/nav-controller.js +++ b/ionic/components/nav/nav-controller.js @@ -1,3 +1,5 @@ +import {extend} from '../../util/util'; + export class NavController { @@ -33,3 +35,9 @@ export class NavController { return this._nav.pop.apply(this._nav, arguments); } } + +export class NavParams { + constructor(params) { + extend(this, params); + } +} diff --git a/ionic/components/nav/nav-params.js b/ionic/components/nav/nav-params.js deleted file mode 100644 index a9a1df7d5f..0000000000 --- a/ionic/components/nav/nav-params.js +++ /dev/null @@ -1,9 +0,0 @@ - -import * as util from 'ionic/util'; - - -export class NavParams { - constructor(params) { - util.extend(this, params); - } -} diff --git a/ionic/components/nav/nav.js b/ionic/components/nav/nav.js index 429e46094a..8133c690db 100644 --- a/ionic/components/nav/nav.js +++ b/ionic/components/nav/nav.js @@ -2,9 +2,7 @@ import {Component, Directive, onInit} from 'angular2/src/core/annotations_impl/a import {View} from 'angular2/src/core/annotations_impl/view'; import {Parent} from 'angular2/src/core/annotations_impl/visibility'; import {Optional} from 'angular2/src/di/annotations_impl'; -import {Compiler} from 'angular2/angular2'; import {ElementRef} from 'angular2/src/core/compiler/element_ref'; -import {DynamicComponentLoader} from 'angular2/src/core/compiler/dynamic_component_loader'; import {Injector} from 'angular2/di'; import {ViewController} from '../view/view-controller'; @@ -24,10 +22,10 @@ import {ViewController} from '../view/view-controller'; export class Nav extends ViewController { constructor( - @Optional() viewCtrl: ViewController, + @Optional() parentViewCtrl: ViewController, injector: Injector ) { - super(viewCtrl, injector); + super(parentViewCtrl, injector); } onInit() { diff --git a/ionic/components/tabs/tab.js b/ionic/components/tabs/tab.js index c685f42df4..935836f420 100644 --- a/ionic/components/tabs/tab.js +++ b/ionic/components/tabs/tab.js @@ -1,16 +1,12 @@ import {Parent} from 'angular2/src/core/annotations_impl/visibility'; import {Directive, Component, onInit} from 'angular2/src/core/annotations_impl/annotations'; -import {Optional} from 'angular2/src/di/annotations_impl' import {View} from 'angular2/src/core/annotations_impl/view'; import {ElementRef} from 'angular2/src/core/compiler/element_ref'; -import {Compiler} from 'angular2/angular2'; -import {DynamicComponentLoader} from 'angular2/src/core/compiler/dynamic_component_loader'; import {Injector} from 'angular2/di'; import {ViewController} from '../view/view-controller'; import {ViewItem} from '../view/view-item'; import {Tabs} from './tabs'; -import {Content} from '../content/content'; @Component({ diff --git a/ionic/components/tabs/tabs.js b/ionic/components/tabs/tabs.js index fcce9fc5c2..bc92e5745f 100644 --- a/ionic/components/tabs/tabs.js +++ b/ionic/components/tabs/tabs.js @@ -1,9 +1,6 @@ import {Optional} from 'angular2/src/di/annotations_impl' import {Component, onInit} from 'angular2/src/core/annotations_impl/annotations'; import {View} from 'angular2/src/core/annotations_impl/view'; -import {ElementRef} from 'angular2/src/core/compiler/element_ref'; -import {Compiler} from 'angular2/angular2'; -import {DynamicComponentLoader} from 'angular2/src/core/compiler/dynamic_component_loader'; import {Injector} from 'angular2/di'; import {NgFor} from 'angular2/angular2'; diff --git a/ionic/components/view/view-controller.js b/ionic/components/view/view-controller.js index e1b377399a..10d4f58e19 100644 --- a/ionic/components/view/view-controller.js +++ b/ionic/components/view/view-controller.js @@ -1,8 +1,10 @@ import {Compiler} from 'angular2/angular2'; import {ElementRef} from 'angular2/src/core/compiler/element_ref'; import {DynamicComponentLoader} from 'angular2/src/core/compiler/dynamic_component_loader'; -import {Injector} from 'angular2/di'; +import {AppViewManager} from 'angular2/src/core/compiler/view_manager'; +import {Injector, bind} from 'angular2/di'; +import {IonicApp} from '../app/app'; import {ViewItem} from './view-item'; import {NavController} from '../nav/nav-controller'; import {PaneController} from '../nav/pane'; @@ -22,10 +24,11 @@ export class ViewController { this.compiler = injector.get(Compiler); this.loader = injector.get(DynamicComponentLoader); - this.injector = injector; + this.viewMngr = injector.get(AppViewManager); + + let ionicApp = injector.get(IonicApp); this.items = []; - this.navCtrl = new NavController(this); this.panes = new PaneController(this); this.sbTransition = null; @@ -33,6 +36,12 @@ export class ViewController { this.id = ++ctrlIds; this._ids = -1; + + // build a new injector for child ViewItems to use + this.injector = injector.resolveAndCreateChild([ + bind(ViewController).toValue(this), + bind(NavController).toValue(new NavController(this)) + ]); } push(ComponentType, params = {}, opts = {}) { diff --git a/ionic/components/view/view-item.js b/ionic/components/view/view-item.js index d9491eab37..462bb63335 100644 --- a/ionic/components/view/view-item.js +++ b/ionic/components/view/view-item.js @@ -1,12 +1,8 @@ import {EventEmitter} from 'angular2/angular2'; -import {ViewContainerRef} from 'angular2/src/core/compiler/view_container_ref'; import {ElementRef} from 'angular2/src/core/compiler/element_ref'; import {bind} from 'angular2/di'; -import {AppViewManager} from 'angular2/src/core/compiler/view_manager'; -import {ViewController} from '../view/view-controller'; -import {NavController} from '../nav/nav-controller'; -import {NavParams} from '../nav/nav-params'; +import {NavParams} from '../nav/nav-controller'; export class ViewItem { @@ -47,12 +43,8 @@ export class ViewItem { viewCtrl.panes.get(itemStructure, pane => { this.pane = pane; - let viewMngr = viewCtrl.injector.get(AppViewManager); - // create a new injector just for this ViewItem let injector = viewCtrl.injector.resolveAndCreateChild([ - bind(ViewController).toValue(viewCtrl), - bind(NavController).toValue(viewCtrl.navCtrl), bind(NavParams).toValue(this.params), bind(ViewItem).toValue(this) ]); @@ -63,7 +55,7 @@ export class ViewItem { let hostViewRef = contentContainer.create(componentProtoViewRef, -1, null, injector); // get the component's instance, and set it to the this ViewItem - this.setInstance( viewMngr.getComponent(new ElementRef(hostViewRef, 0)) ); + this.setInstance( viewCtrl.viewMngr.getComponent(new ElementRef(hostViewRef, 0)) ); this.viewElement( hostViewRef._view.render._view.rootNodes[0] ); // remember how to dispose of this reference