<!DOCTYPE html>
<html>
  <head>
    <script src="https://code.angularjs.org/tools/system.js"></script>
    <script src="https://code.angularjs.org/tools/typescript.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.15/angular2-polyfills.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.15/angular2.dev.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.15/router.dev.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.15/http.dev.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.15/Rx.js"></script>
    <script src="config.js"></script>
    <script src="https://npmcdn.com/ionic-angular@2.0.0-beta.6/bundles/ionic.system.js"></script>
  
    <link href="https://npmcdn.com/ionic-angular@2.0.0-beta.6/bundles/ionic.ios.css" rel="stylesheet">
    <link href="style.css" rel="stylesheet">
  </head>

  <body>
    <!-- this Ionic's root component and where the app will load -->
    <ion-app></ion-app>
    
    <script>
      System.import('app.ts')
    </script>
  </body>

</html>
import { Page, NavController, Modal, Platform } from 'ionic-angular/index';
import { ModalPage1 } from './modalPage1.ts'


@Page({
  templateUrl:"home.html"
})
export class HomePage {
  constructor(private nav: NavController, private platform: Platform) {}
  
  openModal() {
    let modal = Modal.create(ModalPage1);
    // Promise that is resolved when Modal is dismissed
    this.nav.present(modal); 
  }
}
SCROLL-CONTENT {
	overflow-y: auto !important;
}

CODE {
  background: #EFEFEF;
}
System.config({
  transpiler: 'typescript',
  typescriptOptions: {
    "emitDecoratorMetadata": true,
		"experimentalDecorators": true,
		//"module": "commonjs",
		//"target": "es6"
  }
});
import { App, Platform } from 'ionic-angular/index';
import { HomePage } from './home.ts';


@App({
  template: '<ion-nav [root]="rootPage"></ion-nav>',
  config: {} // http://ionicframework.com/docs/v2/api/config/Config/
})
export class MyApp {
  constructor(private platform: Platform) {
    this.rootPage = HomePage;
  }
}
<ion-navbar *navbar>
  <ion-title>Demo</ion-title>
</ion-navbar>

<ion-content padding class="has-header">
  <h1>Demo for issue with closing modal from nested view</h1>
  
  <button block (click)="openModal()">Click to open modal</button>
</ion-content>
<ion-navbar *navbar hideBackButton="true">
  <ion-title>Modal Page #1</ion-title>
</ion-navbar>

<ion-content padding class="has-header">
  <h1>This is the modal page #1</h1>
  
  <button block (click)="goToSecondPage()">Click to navigate to second page</button>
</ion-content>
import { Page, NavController, ViewController } from 'ionic-angular/index';
import { ModalPage2 } from './modalPage2.ts'


@Page({
  templateUrl:"modalPage1.html"
})
export class ModalPage1 {
  constructor(private nav: NavController, private viewCtrl: ViewController) {}
	
  goToSecondPage() {
    this.nav.push(ModalPage2, {
      modal: this.viewCtrl
    });
  }
}
<ion-navbar *navbar hideBackButton="true">
  <ion-title>Modal Page #2</ion-title>
</ion-navbar>

<ion-content padding class="has-header">
  <h1>This is the modal page #2</h1>
  
  <button block (click)="closeModalPopToRoot()">Try to close modal with popToRoot()</button>
  <button block (click)="closeModalViewCtrilDismiss()">Try to close modal with ViewController.dismiss()</button>

</ion-content>
import { Page, NavController, NavParams } from 'ionic-angular/index';


@Page({
  templateUrl:"modalPage2.html"
})
export class ModalPage2 {
  constructor(private nav: NavController, private params: NavParams) {}
	
  closeModalPopToRoot() {
    this.nav.popToRoot({
      animate: true,
      animation: 'ios-transition',
      //duration: 400,
      direction: 'back'
    });
  }
  
  closeModalViewCtrilDismiss() {
    console.log(this.params.data.modal);
    this.params.data.modal.dismiss();
  }
}