6、Modal

1、首先Modal是一个内容窗格、通常用来做一个选择或编辑。

先来看一下 tabs.html 做了什么。
/* --- tabs.html ----*/
 
<ion-navbar *navbar hideBackButton>
  <ion-title>Modals</ion-title>
</ion-navbar>
 
<ion-content>
 
  <ion-list>
    <ion-list-header>
      Hobbits
    </ion-list-header>
    <a ion-item (click)="openModal({charNum: 0})">
      Gollum
    </a>
    <a ion-item (click)="openModal({charNum: 1})">
      Frodo Baggins
    </a>
    <a ion-item (click)="openModal({charNum: 2})">
      Sam
    </a>
  </ion-list>
 
</ion-content>
 
/* --- tabs.html ----*/

上述常见了 3个 item 并对每个 item监听了一个 click方法 传了一个参数。 来看 tabs.js

/* --- tabs.js ----*/
 
import { Modal, NavController, Page} from 'ionic-angular';
import { ModalsContentPage } from './modal.js'
 
@Page({
  templateUrl: 'build/pages/tabs/tabs.html',
})
 
export class TabsPage {
 
  static get parameters() {
    return [[NavController]];
  }
   
  constructor(nav) {
      this.nav = nav;
  }
 
  openModal(characterNum) {
 
    let modal = Modal.create(ModalsContentPage, characterNum);
    this.nav.present(modal);
 
  }
 
}
 
/* --- tabs.js ----*/

首先 我导入了。import { ModalNavControllerPage } from 'ionic-angular' page不用说啦。

还记得。navController么?他是用来控制路由的 。我记得原来 用他路由传参数是。
this.nav.push( ItemDetailsPage , {
       item: item
});
 

那这里用的是 this.nav.present(modal); 看完以前的章节 可以得知当创建loading alert的时候 他都用的是 present 而不是 push那代表着。其实他本身并不是导航到另一个路由

而是变成一个层。覆盖到 我们的页面之上。这点要记住。Modal.create的方法接受个两个参数 一个是组件。一个就是我们的参数。。我们在来看 modal.js 是怎么接收这个参数的。
/* --- modal.js ----*/
 
import { NavParams, Page,ViewController} from 'ionic-angular';
 
@Page({
    templateUrl: 'build/pages/tabs/modal.html',
})
export class ModalsContentPage {
    static get parameters() {
        return [[NavParams],[ViewController]];
    }
 
    constructor(params,viewCtrl) {
        this.params = params;
        this.viewCtrl = viewCtrl;
        var characters = [
            {
                name: 'Gollum',
                quote: 'Sneaky little hobbitses!',
                image: 'img/1.jpg',
                items: [
                    { title: 'Race', note: 'Hobbit' },
                    { title: 'Culture', note: 'River Folk' },
                    { title: 'Alter Ego', note: 'Smeagol' }
                ]
            },
            {
                name: 'Frodo',
                quote: 'Go back, Sam! I\'m going to Mordor alone!',
                image: 'img/1.jpg',
                items: [
                    { title: 'Race', note: 'Hobbit' },
                    { title: 'Culture', note: 'Shire Folk' },
                    { title: 'Weapon', note: 'Sting' }
                ]
            },
            {
                name: 'Samwise Gamgee',
                quote: 'What we need is a few good taters.',
                image: 'img/1.jpg',
                items: [
                    { title: 'Race', note: 'Hobbit' },
                    { title: 'Culture', note: 'Shire Folk' },
                    { title: 'Nickname', note: 'Sam' }
                ]
            }
        ];
        this.character = characters[this.params.get('charNum')];
    }
 
    dismiss() {
        this.viewCtrl.dismiss();
    }
}
 
/* --- modal.js ----*/
首先呢 我导入了。import { NavParamsPageViewController } from 'ionic-angular';

同样的 虽说我们路由的导航 从 this.nav.push( )变成了 this.nav.present() 但是我们从接收参数的方法并没有改变。我们同样是用this.params.get('charNum')获取参数

1、解析一下 constructor里的代码 
     1、var characters 其实就是获取一个局部变量里面的数组就是数据。
  2、this.params.get('charNum'获取一个参数 在 tabs.html 里我们得知他的参数返回一个number类型。 所以获取到了 var characters 数组中的一条数据
    3、this.character 其实就相当于 ng1中的 $scope.character 他本身跟局部变量 var characters 并没有关系,所以这里把得到的数据 给作用域 this.character

2、来看 dismiss 方法 this.viewCtrl.dismiss(); viewCtrl : ViewController 中的 ViewController  他又是啥呢? 因为 modal 他的创建 是覆盖页面变成一个层 ,所以把这个层去除掉的时候

就需要用到 this.viewCtrl.dismiss();这个方法了。之后在来看 modal.html页面。
/* --- modal.html ----*/
 
<ion-toolbar>
    <ion-title>
        Description
    </ion-title>
</ion-toolbar>
 
<ion-content padding>
    <ion-list>
        <ion-item>
            <ion-avatar item-left>
                <img src="{{character.image}}">
            </ion-avatar>
            <h2>{{character.name}}</h2>
            <p>{{character.quote}}</p>
        </ion-item>
 
        <ion-item *ngFor="let item of character['items']">
            {{item.title}}
            <ion-note item-right>
                {{item.note}}
            </ion-note>
        </ion-item>
    </ion-list>
    <button  block (click)="dismiss()">关闭 modal</button>
</ion-content>
 
/* --- modal.html ----*/

最终效果:

posted @ 2016-06-06 01:11  淡定君  阅读(797)  评论(0编辑  收藏  举报