Compare commits

..

25 Commits

Author SHA1 Message Date
Dan Bucholtz
318737535f fix(navigation): fix popTo signature and make usage uniform 2017-09-06 15:50:00 -05:00
Dan Bucholtz
04fe92cd58 chore(gitignore): update gitignore to includ .sourcemaps per new app-scripts 2017-09-06 15:12:51 -05:00
Ken Sodemann
b809665944 fix(slider): guard the processing of _slides
This fixes issue ##12791
2017-09-05 09:35:10 -05:00
mhartington
4d786b30ba docs(modal): fix trailing space 2017-09-01 12:19:19 -04:00
Wilson Hobbs
4f49f27824 docs(modal): add example of nested ionNav in modal 2017-09-01 12:15:06 -04:00
Jan Piotrowski
7e8bd5a8fe docs(platform): make more readable 2017-09-01 12:08:58 -04:00
Jan Piotrowski
f4539aacc9 docs(datetime): add note about Date().toISOString(); (#12501)
* add note about `Date().toISOString();`

right now the docs is missing the information how to actually create such an ISO string in a simple way. This adds the most basic example possible.

* docs(datetime): remove type definition from example
2017-08-31 13:23:19 -05:00
Jan Piotrowski
4911d9f01a docs(nav-push): change property order (#12468)
same order as in constructor and per importance
2017-08-31 14:06:53 -04:00
Henry Dang
6e64b8d915 docs(modal): fix improper capitalization (#12321) 2017-08-31 14:03:08 -04:00
Daniel Fliegauf
e3216da03e docs(config): add statusbarPadding to config (#12168)
Add parameter for hiding extra padding when statusbar is hidden.
2017-08-31 14:00:23 -04:00
Todd Pressley
bd0c265978 docs(content): correct content docs typo, "need" (#12707)
Corrects easily missed typo in `ion-content` documentation: "if ... need," to "... needed"
2017-08-31 13:56:14 -04:00
Alex Ford
846eb09991 docs(nav-params): include import statements (#12657)
docs(nav-params): include import statements
2017-08-31 13:55:23 -04:00
Jeff Cressman
ac4a043314 docs(toolbar): fix a spelling error for toolbar-header (#12676)
docs(toolbar): fix a spelling error for toolbar-header
2017-08-31 13:36:26 -04:00
Brian Soumakian
106950533c fix(navigation): ensure secondaryId always has a string value (#12641) 2017-08-31 12:31:14 -05:00
Appie
295fe783b0 docs(datetime): fix typo (#12776) 2017-08-31 13:26:21 -04:00
Brian Soumakian
0a6bb3bb21 fix(navigation): check existence of done transition callback (#12640) 2017-08-31 09:30:34 -05:00
Ken Sodemann
1b9c3daef1 chore(issue template): add resources to the issue template 2017-08-29 12:51:40 -05:00
perry
26b09f1d49 chore(CI): branches property must be a child of build 2017-08-10 13:38:05 -05:00
perry
1e9539b9df chore(CI): don’t need to ingore core/overlay branch 2017-08-10 13:31:43 -05:00
perry
17b3a39f0d chore(CI): ignore refactor branches 2017-08-10 13:28:42 -05:00
Daniel Imhoff
475b722c7d fix(generators): Update documentation URLs for templates
fixes https://github.com/ionic-team/ionic-cli/issues/2622
2017-08-09 14:02:52 -05:00
Kelvin Dart
50beafae6a docs(input): correct the autocomplete and autocorrect description (#12613) 2017-08-08 12:42:07 +02:00
Dan Bucholtz
f605f0a74c chore(changelog): add details about tabUrlPath to changelog 2017-07-27 15:04:21 -05:00
Dan Bucholtz
e401997a42 chore(changelog): change --save to --save-dev for app-scripts 2017-07-27 15:00:32 -05:00
Dan Bucholtz
16f2ebe241 chore(changelog): 3.6.0 changelog 2017-07-27 14:58:02 -05:00
29 changed files with 905 additions and 755 deletions

View File

@@ -1,3 +1,6 @@
**Resources:**
Before submitting an issue, please consult our troubleshooting guide (http://ionicframework.com/docs/troubleshooting/) and developer resources (http://ionicframework.com/docs/developer-resources/)
**Ionic version:** (check one with "x")
[ ] **1.x** (For Ionic 1.x issues, please use https://github.com/ionic-team/ionic-v1)
[ ] **2.x**

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@ log.txt
*.sublime-workspace
.idea/
.sourcemaps/
.vscode/
.sass-cache/
.versions/

View File

@@ -1,3 +1,71 @@
<a name="3.6.0"></a>
# [3.6.0](https://github.com/ionic-team/ionic/compare/v3.5.3...v3.6.0) (2017-07-27)
### Upgrade Instructions
`ionic-angular` 3.6.0 requires developer's to update to the latest version of the `Ionic CLI` and `@ionic/app-scripts`.
To upgrade, please run
```
npm install -g ionic@latest
npm install @ionic/app-scripts@latest --save-dev
npm install ionic-angular@latest --save
```
### Notes
The URL when using deep linking is shortened and improved in this release. Due to a limitation in our nav system, if you're using `ion-tabs` and have a tab name that matches a segment, meaning you have a tab name of `schedule` and a segment of `schedule`, there could potentially be issues. To mitigate these issues, make sure you set the `tabUrlPath` property on the `ion-tab` and give it a unique name. This limitation will require an API change to fix so it will be resolved in `ionic-angular` 4.x.
The upgrades include necessary changes to generators that add back lazy loading functionality, as well as an improved way of generating component/directives/and pipes.
### New Generators
The release adds back the functionality to generate lazy loaded pages.
To generate a lazy loaded page, run:
```bash
ionic g page <Page-Name>
```
This will include a `.module.ts` file in the page directory created. If you do not want to generate a lazy loaded page, you can run:
```bash
ionic g page <Page-Name> --no-module
```
This will also generate lazy loaded tabs as well, accepting the `--no-module` flag as well to disable it.
For pipes/components/components, we now generate a shared common module for each of these.
So running:
```bash
ionic g component music-card
```
Will create a `components/components.module.ts` file that declares and exports the `music-card` component.
We think that this will allow developers to get up and running with custom components much faster and will less overhead.
### Bug Fixes
* **list:** remove margin of MD buttons in ion-item-options ([#12263](https://github.com/ionic-team/ionic/issues/12263)) ([97f9522](https://github.com/ionic-team/ionic/commit/97f9522))
* **nav:** make call to setPages return the promise so if it rejects it doesn't get lost ([de0f9d5](https://github.com/ionic-team/ionic/commit/de0f9d5))
* **navigation:** account for race conditions in developer's code ([4596dbe](https://github.com/ionic-team/ionic/commit/4596dbe))
* **navigation:** fix bug where that occurred when tab identifier and segment had the exact same string ([add0c4e](https://github.com/ionic-team/ionic/commit/add0c4e))
* **navigation:** fix null pointer exceptions that would occur when destroying a nav controller while its transitioning ([584afd0](https://github.com/ionic-team/ionic/commit/584afd0))
* **navigation:** reduce urls to minimum set of fields ([a8ceee4](https://github.com/ionic-team/ionic/commit/a8ceee4))
### Features
* **generators:** refactor generators ([400aa54](https://github.com/ionic-team/ionic/commit/400aa54))
<a name="3.5.3"></a>
## [3.5.3](https://github.com/ionic-team/ionic/compare/v3.5.2...v3.5.3) (2017-07-14)

View File

@@ -4,6 +4,9 @@ jobs:
working_directory: ~/ionic/
docker:
- image: node:7
branches:
ignore:
- mono-refactor
steps:
- checkout
- restore_cache:

1409
package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "ionic2",
"version": "3.5.3",
"version": "3.6.0",
"description": "A powerful framework for building mobile and progressive web apps with JavaScript and Angular",
"keywords": [
"ionic",

View File

@@ -3,8 +3,8 @@ import { Component } from '@angular/core';
/**
* Generated class for the $CLASSNAME component.
*
* See https://angular.io/docs/ts/latest/api/core/index/ComponentMetadata-class.html
* for more info on Angular Components.
* See https://angular.io/api/core/Component for more info on Angular
* Components.
*/
@Component({
selector: '$FILENAME',

View File

@@ -3,8 +3,8 @@ import { Directive } from '@angular/core';
/**
* Generated class for the $CLASSNAME directive.
*
* See https://angular.io/docs/ts/latest/api/core/index/DirectiveMetadata-class.html
* for more info on Angular Directives.
* See https://angular.io/api/core/Directive for more info on Angular
* Directives.
*/
@Directive({
selector: '[$FILENAME]' // Attribute selector

View File

@@ -4,8 +4,8 @@ $IMPORTSTATEMENT
/**
* Generated class for the $CLASSNAME page.
*
* See http://ionicframework.com/docs/components/#navigation for more info
* on Ionic pages and navigation.
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
$IONICPAGE
@Component({

View File

@@ -3,8 +3,7 @@ import { Pipe, PipeTransform } from '@angular/core';
/**
* Generated class for the $CLASSNAME pipe.
*
* See https://angular.io/docs/ts/latest/guide/pipes.html for more info on
* Angular Pipes.
* See https://angular.io/api/core/Pipe for more info on Angular Pipes.
*/
@Pipe({
name: '$PIPENAME',

View File

@@ -5,8 +5,8 @@ import 'rxjs/add/operator/map';
/*
Generated class for the $CLASSNAME provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular DI.
See https://angular.io/guide/dependency-injection for more info on providers
and Angular DI.
*/
@Injectable()
export class $CLASSNAME {

View File

@@ -4,8 +4,8 @@ $TABS_IMPORTSTATEMENT
/**
* Generated class for the $CLASSNAME tabs.
*
* See https://angular.io/docs/ts/latest/guide/dependency-injection.html for
* more info on providers and Angular DI.
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
$IONICPAGE
@Component({

View File

@@ -31,7 +31,7 @@ export class EventEmitterProxy<T> extends EventEmitter<T> {
* The Content component provides an easy to use content area with
* some useful methods to control the scrollable area. There should
* only be one content in a single view component. If additional scrollable
* elements are need, use [ionScroll](../../scroll/Scroll).
* elements are needed, use [ionScroll](../../scroll/Scroll).
*
*
* The content area can also implement pull-to-refresh with the

View File

@@ -135,6 +135,8 @@ import {
* to serialize and pass within JSON objects, and sending databases a standardized
* format which it can be easily parsed if need be.
*
* To create an ISO datetime string for the current date and time, e.g. use `const currentDate = (new Date()).toISOString();`.
*
* An ISO format can be used as a simple year, or just the hour and minute, or get more
* detailed down to the millisecond and timezone. Any of the ISO formats below can be used,
* and after a user selects a new value, Ionic will continue to use the same ISO format
@@ -167,7 +169,7 @@ import {
* ## Min and Max Datetimes
*
* Dates are infinite in either direction, so for a user's selection there should be at
* least some form of restricting the dates that can be selected. Be default, the maximum
* least some form of restricting the dates that can be selected. By default, the maximum
* date is to the end of the current year, and the minimum date is from the beginning
* of the year that was 100 years ago.
*

View File

@@ -211,12 +211,12 @@ export class TextInput extends BaseInput<string> implements IonicFormInput {
@ViewChild('textInput', { read: ElementRef }) _native: ElementRef;
/**
* @input {string} Instructional text that shows before the input has a value.
* @input {string} Set the input's autocomplete property. Values: `"on"`, `"off"`. Default `"off"`.
*/
@Input() autocomplete: string = '';
/**
* @input {string} Instructional text that shows before the input has a value.
* @input {string} Set the input's autocorrect property. Values: `"on"`, `"off"`. Default `"off"`.
*/
@Input() autocorrect: string = '';

View File

@@ -19,7 +19,7 @@ import { DeepLinker } from '../../navigation/deep-linker';
*
* When a modal (or any other overlay such as an alert or actionsheet) is
* "presented" to a nav controller, the overlay is added to the app's root nav.
* After the modal has been presented, from within the component instance The
* After the modal has been presented, from within the component instance, the
* modal can later be closed or "dismissed" by using the ViewController's
* `dismiss` method. Additionally, you can dismiss any overlay by using `pop`
* on the root nav controller. Modals are not reusable. When a modal is dismissed
@@ -112,6 +112,25 @@ import { DeepLinker } from '../../navigation/deep-linker';
*
* }
* ```
*
* A common issue is that a developer may try to implement navigation in a modal, but when you try NavController.push(),
* you will notice that the status bar on iOS gets cut off. The proper way to implement navigation in a modal is to
* make the modal component a navigation container, and set the root page to the page you want to show in your modal.
*
* ```ts
* @Component({
* template: '<ion-nav [root]="rootPage" [rootParams]="rootParams"></ion-nav>'
* })
* export class MyModalWrapper {
* rootPage = 'MyModalContentPage'; // This is the page you want your modal to display
* rootParams;
*
* constructor(navParams: NavParams, private viewCtrl: ViewController) {
* this.rootParams = Object.assign({}, navParams.data, {viewCtrl: viewCtrl});
* // This line will send the view controller into your child views, so you can dismiss the modals from there.
* }
* }
* ```
* @demo /docs/demos/src/modal/
* @see {@link /docs/components#modals Modal Component Docs}
*/

View File

@@ -32,8 +32,8 @@ import { Page } from '../../navigation/nav-util';
* template: `<button ion-button [navPush]="pushPage" [navParams]="params">Go</button>`
* })
* class MyPage {
* params: Object;
* pushPage: any;
* params: Object;
* constructor(){
* this.pushPage = LoginPage;
* this.params = { id: 42 };

View File

@@ -693,8 +693,10 @@ function destroyLoop(s: Slides) {
eachChild(s._wrapper, '.' + CLS.slide + '.' + CLS.slideDuplicate, ele => {
ele.parentElement.removeChild(ele);
});
for (var i = 0; i < s._slides.length; i++) {
s._slides[i].removeAttribute('data-swiper-slide-index');
if (s._slides) {
for (var i = 0; i < s._slides.length; i++) {
s._slides[i].removeAttribute('data-swiper-slide-index');
}
}
}

View File

@@ -8,7 +8,7 @@ import { GestureController } from '../../gestures/gesture-controller';
import { isTrueProperty } from '../../util/util';
import { Tab as ITab } from '../../navigation/nav-interfaces';
import { NavControllerBase } from '../../navigation/nav-controller-base';
import { NavOptions } from '../../navigation/nav-util';
import { NavOptions, TransitionDoneFn } from '../../navigation/nav-util';
import { Platform } from '../../platform/platform';
import { TabButton } from './tab-button';
import { Tabs } from './tabs';
@@ -304,7 +304,7 @@ export class Tab extends NavControllerBase implements ITab {
/**
* @hidden
*/
load(opts: NavOptions, done?: () => void) {
load(opts: NavOptions, done?: TransitionDoneFn) {
if (this._lazyRootFromUrl || (!this._loaded && this.root)) {
this.setElementClass('show-tab', true);
// okay, first thing we need to do if check if the view already exists
@@ -317,7 +317,10 @@ export class Tab extends NavControllerBase implements ITab {
if (i === numViews) {
// this is the last view in the stack and it's the same
// as the segment so there's no change needed
return done();
if (done) {
done(false, false);
}
return;
} else {
// it's not the exact view as the end
// let's have this nav go back to this exact view
@@ -343,7 +346,10 @@ export class Tab extends NavControllerBase implements ITab {
this._dom.read(() => {
this.resize();
});
return done();
if (done) {
done(false, false);
}
return;
}
}

View File

@@ -642,7 +642,7 @@ export class Tabs extends Ion implements AfterViewInit, RootNode, ITabs, Navigat
/**
* @private
*/
_getSelectedTabIndex(secondaryId: string, fallbackIndex: number = 0): number {
_getSelectedTabIndex(secondaryId: string = '', fallbackIndex: number = 0): number {
// we found a segment which probably represents which tab to select
const indexMatch = secondaryId.match(/tab-(\d+)/);
if (indexMatch) {

View File

@@ -9,7 +9,7 @@ import { ViewController } from '../../navigation/view-controller';
* @name Header
* @description
* Header is a parent component that holds the navbar and toolbar component.
* It's important to note that `ion-header` needs to be the one of the three root elements of a page
* It's important to note that `ion-header` needs to be one of the three root elements of a page
*
* @usage
*

View File

@@ -118,6 +118,7 @@ import { isArray, isDefined, isFunction, isObject } from '../util/util';
* | `popoverEnter` | `string` | The name of the transition to use while a popover is presented. |
* | `popoverLeave` | `string` | The name of the transition to use while a popover is dismissed. |
* | `spinner` | `string` | The default spinner to use when a name is not defined. |
* | `statusbarPadding` | `boolean` | Whether to hide extra padding for statusbar. |
* | `swipeBackEnabled` | `boolean` | Whether native iOS swipe to go back functionality is enabled. |
* | `tabsHighlight` | `boolean` | Whether to show a highlight line under the tab when it is selected. |
* | `tabsLayout` | `string` | The layout to use for all tabs. Available options: `"icon-top"`, `"icon-start"`, `"icon-end"`, `"icon-bottom"`, `"icon-hide"`, `"title-hide"`. |

View File

@@ -2,7 +2,7 @@ import { ComponentFactory, ComponentFactoryResolver } from '@angular/core';
import { Location } from '@angular/common';
import { App } from '../components/app/app';
import { DIRECTION_BACK, NavLink, NavSegment, convertToViews, isNav, isTab, isTabs, } from './nav-util';
import { DIRECTION_BACK, NavLink, NavSegment, TransitionDoneFn, convertToViews, isNav, isTab, isTabs } from './nav-util';
import { ModuleLoader } from '../util/module-loader';
import { isArray, isPresent } from '../util/util';
import { Tab, Tabs } from './nav-interfaces';
@@ -380,9 +380,9 @@ export class DeepLinker {
*
* @internal
*/
_loadViewForSegment(navContainer: NavigationContainer, segment: NavSegment, done: Function) {
_loadViewForSegment(navContainer: NavigationContainer, segment: NavSegment, done: TransitionDoneFn) {
if (!segment) {
return done();
return done(false, false);
}
if (isTabs(navContainer) || (isTab(navContainer) && navContainer.parent)) {
@@ -395,7 +395,7 @@ export class DeepLinker {
updateUrl: false,
animate: false
}, true);
return done();
return done(false, false);
}
const navController = <NavController> <any> navContainer;
@@ -410,14 +410,14 @@ export class DeepLinker {
if (i === numViews) {
// this is the last view in the stack and it's the same
// as the segment so there's no change needed
return done();
return done(false, false);
} else {
// it's not the exact view as the end
// let's have this nav go back to this exact view
return navController.popTo(viewController, {
animate: false,
updateUrl: false,
}, {}, done);
}, done);
}
}
}

View File

@@ -24,6 +24,7 @@ import {
STATE_DESTROYED,
STATE_INITIALIZED,
STATE_NEW,
TransitionDoneFn,
TransitionInstruction,
convertToViews,
} from './nav-util';
@@ -106,7 +107,7 @@ export class NavControllerBase extends Ion implements NavController {
this._destroyed = false;
}
push(page: any, params?: any, opts?: NavOptions, done?: () => void): Promise<any> {
push(page: any, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
insertStart: -1,
insertViews: [{ page: page, params: params }],
@@ -114,7 +115,7 @@ export class NavControllerBase extends Ion implements NavController {
}, done);
}
insert(insertIndex: number, page: any, params?: any, opts?: NavOptions, done?: () => void): Promise<any> {
insert(insertIndex: number, page: any, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
insertStart: insertIndex,
insertViews: [{ page: page, params: params }],
@@ -122,7 +123,7 @@ export class NavControllerBase extends Ion implements NavController {
}, done);
}
insertPages(insertIndex: number, insertPages: any[], opts?: NavOptions, done?: () => void): Promise<any> {
insertPages(insertIndex: number, insertPages: any[], opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
insertStart: insertIndex,
insertViews: insertPages,
@@ -130,7 +131,7 @@ export class NavControllerBase extends Ion implements NavController {
}, done);
}
pop(opts?: NavOptions, done?: () => void): Promise<any> {
pop(opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
removeStart: -1,
removeCount: 1,
@@ -138,7 +139,7 @@ export class NavControllerBase extends Ion implements NavController {
}, done);
}
popTo(indexOrViewCtrl: any, opts?: NavOptions, done?: () => void): Promise<any> {
popTo(indexOrViewCtrl: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
let config: TransitionInstruction = {
removeStart: -1,
removeCount: -1,
@@ -153,7 +154,7 @@ export class NavControllerBase extends Ion implements NavController {
return this._queueTrns(config, done);
}
popToRoot(opts?: NavOptions, done?: () => void): Promise<any> {
popToRoot(opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
removeStart: 1,
removeCount: -1,
@@ -169,7 +170,7 @@ export class NavControllerBase extends Ion implements NavController {
return Promise.all(promises);
}
remove(startIndex: number, removeCount: number = 1, opts?: NavOptions, done?: () => void): Promise<any> {
remove(startIndex: number, removeCount: number = 1, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
removeStart: startIndex,
removeCount: removeCount,
@@ -177,7 +178,7 @@ export class NavControllerBase extends Ion implements NavController {
}, done);
}
removeView(viewController: ViewController, opts?: NavOptions, done?: () => void): Promise<any> {
removeView(viewController: ViewController, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this._queueTrns({
removeView: viewController,
removeStart: 0,
@@ -186,12 +187,12 @@ export class NavControllerBase extends Ion implements NavController {
}, done);
}
setRoot(pageOrViewCtrl: any, params?: any, opts?: NavOptions, done?: () => void): Promise<any> {
setRoot(pageOrViewCtrl: any, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
return this.setPages([{ page: pageOrViewCtrl, params: params }], opts, done);
}
setPages(viewControllers: any[], opts?: NavOptions, done?: () => void): Promise<any> {
setPages(viewControllers: any[], opts?: NavOptions, done?: TransitionDoneFn): Promise<any> {
if (isBlank(opts)) {
opts = {};
}
@@ -218,7 +219,7 @@ export class NavControllerBase extends Ion implements NavController {
// 7. _transitionStart(): called once the transition actually starts, it initializes the Animation underneath.
// 8. _transitionFinish(): called once the transition finishes
// 9. _cleanup(): syncs the navigation internal state with the DOM. For example it removes the pages from the DOM or hides/show them.
_queueTrns(ti: TransitionInstruction, done: () => void): Promise<boolean> {
_queueTrns(ti: TransitionInstruction, done: TransitionDoneFn): Promise<boolean> {
const promise = new Promise<boolean>((resolve, reject) => {
ti.resolve = resolve;
ti.reject = reject;

View File

@@ -1,7 +1,7 @@
import { EventEmitter } from '@angular/core';
import { Config } from '../config/config';
import { NavOptions } from './nav-util';
import { NavOptions, TransitionDoneFn } from './nav-util';
import { Page } from './nav-util';
import { ViewController } from './view-controller';
import { NavigationContainer } from './navigation-container';
@@ -420,7 +420,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract push(page: Page | string, params?: any, opts?: NavOptions, done?: Function): Promise<any>;
abstract push(page: Page | string, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* Inserts a component into the nav stack at the specified index. This is useful if
@@ -433,7 +433,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract insert(insertIndex: number, page: Page | string, params?: any, opts?: NavOptions, done?: Function): Promise<any>;
abstract insert(insertIndex: number, page: Page | string, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* Inserts an array of components into the nav stack at the specified index.
@@ -445,7 +445,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract insertPages(insertIndex: number, insertPages: Array<{page: Page | string, params?: any}>, opts?: NavOptions, done?: Function): Promise<any>;
abstract insertPages(insertIndex: number, insertPages: Array<{page: Page | string, params?: any}>, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* Call to navigate back from a current component. Similar to `push()`, you
@@ -454,7 +454,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract pop(opts?: NavOptions, done?: Function): Promise<any>;
abstract pop(opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* Navigate back to the root of the stack, no matter how far back that is.
@@ -462,7 +462,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract popToRoot(opts?: NavOptions, done?: Function): Promise<any>;
abstract popToRoot(opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* @hidden
@@ -475,11 +475,10 @@ export abstract class NavController implements NavigationContainer {
* when a new instance needs to be created.
*
* @param {Page|string|ViewController} page The component class or deeplink name you want to push onto the navigation stack.
* @param {object} [params={}] Any NavParams to be used when a new view instance is created at the root.
* @param {object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract popTo(page: Page | string | ViewController, params?: any, opts?: NavOptions, done?: Function): Promise<any>;
abstract popTo(page: Page | string | ViewController, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* @hidden
@@ -497,7 +496,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Any options you want to use pass to transtion.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract remove(startIndex: number, removeCount?: number, opts?: NavOptions, done?: Function): Promise<any>;
abstract remove(startIndex: number, removeCount?: number, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* Removes the specified view controller from the nav stack.
@@ -506,7 +505,7 @@ export abstract class NavController implements NavigationContainer {
* @param {object} [opts={}] Any options you want to use pass to transtion.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract removeView(viewController: ViewController, opts?: NavOptions, done?: Function): Promise<any>;
abstract removeView(viewController: ViewController, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* Set the root for the current navigation stack.
@@ -516,7 +515,7 @@ export abstract class NavController implements NavigationContainer {
* @param {Function} done Callback function on done.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract setRoot(pageOrViewCtrl: Page | string | ViewController, params?: any, opts?: NavOptions, done?: Function): Promise<any>;
abstract setRoot(pageOrViewCtrl: Page | string | ViewController, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
abstract goToRoot(options: NavOptions): Promise<any>;
/**
@@ -529,7 +528,7 @@ export abstract class NavController implements NavigationContainer {
* @param {Object} [opts={}] Nav options to go with this transition.
* @returns {Promise} Returns a promise which is resolved when the transition has completed.
*/
abstract setPages(pages: ({page: Page | string, params?: any} | ViewController)[], opts?: NavOptions, done?: Function): Promise<any>;
abstract setPages(pages: ({page: Page | string, params?: any} | ViewController)[], opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
/**
* @param {number} index The index of the page to get.

View File

@@ -7,6 +7,8 @@
*
* @usage
* ```ts
* import { NavParams } from 'ionic-angular';
*
* export class MyClass{
* constructor(public navParams: NavParams){
* // userParams is an object we have in our nav-parameters
@@ -32,6 +34,8 @@ export class NavParams {
* Get the value of a nav-parameter for the current view
*
* ```ts
* import { NavParams } from 'ionic-angular';
*
* export class MyClass{
* constructor(public navParams: NavParams){
* // userParams is an object we have in our nav-parameters

View File

@@ -221,6 +221,10 @@ export interface TransitionRejectFn {
(rejectReason: any, transition?: Transition): void;
}
export interface TransitionDoneFn {
(hasCompleted: boolean, requiresTransition: boolean, enteringName?: string, leavingName?: string, direction?: string): void;
}
export interface TransitionInstruction {
opts: NavOptions;
insertStart?: number;
@@ -230,7 +234,7 @@ export interface TransitionInstruction {
removeCount?: number;
resolve?: (hasCompleted: boolean) => void;
reject?: (rejectReason: string) => void;
done?: Function;
done?: TransitionDoneFn;
leavingRequiresTransition?: boolean;
enteringRequiresTransition?: boolean;
requiresTransition?: boolean;

View File

@@ -23,7 +23,7 @@ export type DocumentDirection = 'ltr' | 'rtl';
*
* @Component({...})
* export MyPage {
* constructor(public plt: Platform) {
* constructor(public platform: Platform) {
*
* }
* }
@@ -145,8 +145,8 @@ export class Platform {
*
* @Component({...})
* export MyPage {
* constructor(public plt: Platform) {
* if (this.plt.is('ios')) {
* constructor(public platform: Platform) {
* if (this.platform.is('ios')) {
* // This will only print when on iOS
* console.log('I am an iOS device!');
* }
@@ -186,9 +186,9 @@ export class Platform {
*
* @Component({...})
* export MyPage {
* constructor(public plt: Platform) {
* constructor(public platform: Platform) {
* // This will print an array of the current platforms
* console.log(this.plt.platforms());
* console.log(this.platform.platforms());
* }
* }
* ```
@@ -208,10 +208,10 @@ export class Platform {
*
* @Component({...})
* export MyPage {
* constructor(public plt: Platform) {
* constructor(public platform: Platform) {
* // This will print an object containing
* // all of the platforms and their versions
* console.log(plt.versions());
* console.log(platform.versions());
* }
* }
* ```
@@ -255,8 +255,8 @@ export class Platform {
*
* @Component({...})
* export MyApp {
* constructor(public plt: Platform) {
* this.plt.ready().then((readySource) => {
* constructor(public platform: Platform) {
* this.platform.ready().then((readySource) => {
* console.log('Platform ready from', readySource);
* // Platform now ready, execute any required native code
* });

View File

@@ -11,7 +11,7 @@ import { GestureController } from '../gestures/gesture-controller';
import { Haptic } from '../tap-click/haptic';
import { IonicApp } from '../components/app/app-root';
import { Menu } from '../components/menu/menu';
import { NavOptions } from '../navigation/nav-util';
import { NavOptions, TransitionDoneFn } from '../navigation/nav-util';
import { NavControllerBase } from '../navigation/nav-controller-base';
import { OverlayPortal } from '../components/app/overlay-portal';
import { PageTransition } from '../transitions/page-transition';
@@ -501,8 +501,9 @@ export function mockTab(parentTabs: Tabs, overrideLoad: boolean = true): Tab {
);
if (overrideLoad) {
tab.load = (_opts: any, cb: Function) => {
cb();
tab.load = (_opts: any, cb: TransitionDoneFn) => {
cb(false, false);
return Promise.resolve();
};
}