fix(navCtrl): run change detection after stage

Also fixes #675
This commit is contained in:
Adam Bradley
2015-12-01 11:01:09 -06:00
parent ec6cc9cec7
commit 448385ed84
7 changed files with 27 additions and 26 deletions

View File

@@ -1,4 +1,4 @@
import {Compiler, ElementRef, Injector, provide, NgZone, AppViewManager, Renderer} from 'angular2/angular2';
import {ChangeDetectorRef, Compiler, ElementRef, Injector, provide, NgZone, AppViewManager, Renderer} from 'angular2/angular2';
import {wtfLeave, wtfCreateScope, WtfScopeFn} from 'angular2/angular2';
import {Ion} from '../ion';
@@ -115,7 +115,8 @@ export class NavController extends Ion {
compiler: Compiler,
viewManager: AppViewManager,
zone: NgZone,
renderer: Renderer
renderer: Renderer,
cd: ChangeDetectorRef
) {
super(elementRef, config);
@@ -128,6 +129,7 @@ export class NavController extends Ion {
this._viewManager = viewManager;
this._zone = zone;
this._renderer = renderer;
this._cd = cd;
this._views = [];
this._trnsTime = 0;
@@ -686,6 +688,8 @@ export class NavController extends Ion {
return done(enteringView);
}
this._cd.detectChanges();
this._zone.runOutsideAngular(() => {
this._setZIndex(enteringView, leavingView, opts.direction);

View File

@@ -1,4 +1,4 @@
import {Component, Directive, ElementRef, Host, Optional, forwardRef, Inject, NgZone, Compiler, AppViewManager, Renderer, ViewContainerRef} from 'angular2/angular2';
import {ChangeDetectorRef, 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';
@@ -119,9 +119,10 @@ export class Nav extends NavController {
compiler: Compiler,
viewManager: AppViewManager,
zone: NgZone,
renderer: Renderer
renderer: Renderer,
cd: ChangeDetectorRef
) {
super(hostNavCtrl, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer);
super(hostNavCtrl, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd);
if (viewCtrl) {
// an ion-nav can also act as an ion-page within a parent ion-nav

View File

@@ -63,16 +63,10 @@ class FirstPage {
}
}
onPageLoaded() {
console.log('onPageLoaded');
var meNoWorky = true;
meNoWorky(helloIsItMeYoureLookingFor);
}
onPageDidEnter() {
// setTimeout(() => {
// this.nav.push(PrimaryHeaderPage);
// }, 2000);
setTimeout(() => {
this.nav.push(PrimaryHeaderPage);
}, 1000);
}
setPages() {
@@ -83,8 +77,8 @@ class FirstPage {
this.nav.setPages(items);
}
setRoot(PrimaryHeaderPage) {
setRoot() {
this.nav.setRoot(PrimaryHeaderPage);
}
pushPrimaryHeaderPage() {

View File

@@ -1,4 +1,4 @@
import {Component, ElementRef, Compiler, AppViewManager, NgZone, Renderer} from 'angular2/angular2';
import {ChangeDetectorRef, Component, ElementRef, Compiler, AppViewManager, NgZone, Renderer} from 'angular2/angular2';
import {IonicApp} from '../app/app';
import {Config} from '../../config/config';
@@ -22,9 +22,10 @@ export class OverlayNav extends NavController {
compiler: Compiler,
viewManager: AppViewManager,
zone: NgZone,
renderer: Renderer
renderer: Renderer,
cd: ChangeDetectorRef
) {
super(null, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer);
super(null, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd);
if (overlayCtrl.anchor) {
throw ('An app should only have one <ion-overlay></ion-overlay>');

View File

@@ -1,4 +1,4 @@
import {Component, Directive, Host, ElementRef, Compiler, AppViewManager, NgZone, Renderer} from 'angular2/angular2';
import {ChangeDetectorRef, Component, Directive, Host, ElementRef, Compiler, AppViewManager, NgZone, Renderer} from 'angular2/angular2';
import {IonicApp} from '../app/app';
import {Config} from '../../config/config';
@@ -78,10 +78,11 @@ export class Tab extends NavController {
compiler: Compiler,
viewManager: AppViewManager,
zone: NgZone,
renderer: Renderer
renderer: Renderer,
cd: ChangeDetectorRef
) {
// A Tab is a NavController for its child pages
super(parentTabs, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer);
super(parentTabs, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd);
this._isInitial = parentTabs.add(this);

View File

@@ -5,8 +5,8 @@ import {raf, rafFrames} from '../../util/dom';
export class RippleActivator extends Activator {
constructor(app, config) {
super(app, config);
constructor(app, config, zone) {
super(app, config, zone);
this.expands = {};
this.fades = {};

View File

@@ -1,12 +1,12 @@
<ion-navbar>
<ion-toolbar>
<ion-title>Inset Focus</ion-title>
<ion-nav-items secondary>
<button (click)="reload()">
Reload
</button>
</ion-nav-items>
</ion-navbar>
</ion-toolbar>
<ion-content>