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 { Modal, NavController, Page } 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 { NavParams, Page, ViewController } 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 ----*/

最终效果:

时间: 2024-10-26 07:00:05

6、Modal的相关文章

Bootstrap 3之美07-插件Collapse、Accordion、Modal、Tab、Tooltip、Alert、Carousel

类似Page Header, Breadcrumbs, Dropdowns等,都是Bootstrap的组件,是静态的.如果涉及到交互,Bootstrap提供了插件.这些插件包括: ○ 过渡效果: bootstrap-transition.js○ 模态对话框:bootstrap-modal.js○ 下拉项:bootstrap-dropdown.js...... 这些插件可以单独引入到页面.而在bootstrap.js或bootstrap.min.js文件中已经包含了所有的插件. 本篇主要包括: ■

使用Bootstrap 3开发响应式网站实践05,使用Tab、Modal、Form展示内容,使用Popover、Tooltip展示提示信息

本篇体验用Tab插件显示内容.Html部分为: <div class="row" id="moreInfo"> <div class="col-sm-6"> <h3>兰帕德宣布退出英格兰队</h3> <div class="tabbable"> <ul class="nav nav-tabs"> <li class="a

bootstrap-面板、modal

面板: <!-- panel 面板 panel-heading 面板头部 panel-title 面板标题样式 panel-body 面板内容 --> <div class="container"> <div class="row"> <div class="panel panel-info"> <div class="panel-heading"> <h3 c

IOS开发——UI进阶篇(十四)modal

一.modal与pushmodal从下面往上盖住原来的控制器,一般上一个控制器和下一个控制器没有什么关联时用modal,比如联系人的加号跳转页面,任何控制器都可以用modal push一般是上下文有关联时用,(比如设置界面的通用跳转页面)导航控制器才能用push A控制器modal出B控制器,那么A控制器就会强引用B,如果不强引用,无法处理B的业务逻辑(比如点击按钮回答A),会报野指针错误 // modal另一个界面 - (IBAction)modal:(id)sender { // 创建mod

使用Bootstrap 3开发响应式网站实践06,使用ListGroup、Thumbnails展示内容

□ ListGroup展示内容 当希望把同类型的内容以列表.区块展示的时候,ListGroup是不错的选择. <div class="col-sm-6"> <h3>马云为恒大生死战开出男人奖 </h3> <p> 8月27日晚,广州恒大将迎来亚冠联赛生死战,主场迎战西悉尼流浪者队,由于一周之前已经在客场0-1负于对手,本场比赛恒大队必须置死地而后生在主场净胜对手两球.就在今天中午,前不久入主恒大的阿里巴巴老板马云来到球队,在鼓励球员的同时开

iOS基础-UIKit框架-多控制器管理-Modal

Modal Modal效果 一.Modal演示(代码)1.事前准备1>新建一个空项目,删除默认控制器文件2>自定义2个控制器,将ViewController的Class分别设置为这个类3>创建一个window,将其根控制器设置为第一个自定义的控制器.2.拖一个按钮,监听这个按钮并实现方法(用来跳转到第二个界面)-(IBAction)jump{ //展示第二个控制器界面 MJTwoController *two = [[MJTwoViewController alloc] init]: [

Modal框弹出后,2s自动消失

1.html代码(bootstrap组件)<!--modal提示信息--><div class="modal fade" id="showModal"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type=

ansys 常见命令集合

APDL换行与续行- APDL规定每行72个字符 如果要写表达式A=C1+C2 (C1与C2都为表达式 可以用 B=C1 A=B+C2 将一行拆成两行来做但是如果不是表达式,而是输入一个命令参数过多的话,可以用续行命令RMORE,格式如下: RMORE, R7, R8, R9, R10, R11, R12 这个命令每次也只能输入6个参数,如果多于6个,可以重复使用RMORE就可以输入13-18,19-24等等.另外,于上面续行相应的是换行,一行命令太短可以使用多个命令共一行 $",没有双引号.这

Runloop(运行循环)是什么?

运行循环是什么?从介绍到演示 今天整理一下运行循环来帮朋友们了解一下什么是运行循环,也叫消息循环,建议大家称之为运行循环(Runloop). 关于多线程的运行循环(消息循环) 1. 什么是运行循环 (1)Runloop就是运行循环,每个线程内部都有一个运行循环. (2)只有主线程的运行循环默认是开启的,子线程的运行循环. 2. 运行循环的作用 (1)保证程序不退出,iOS的应用程序启动之后,之所以不会退出,就是因为有Runloop(运行循环).运行循环是一个死循环,只有满足一定条件才会结束循环.