ionic2
Modals
Ricerca…
Modale semplice
Modale è un'interfaccia utente temporanea che viene visualizzata nella parte superiore della pagina corrente. Viene spesso utilizzato per l'accesso, l'iscrizione, la modifica delle opzioni esistenti e la selezione delle opzioni.
Esaminiamo un semplice esempio con le modali utilizzate. Per cominciare stiamo creando un progetto bianco e ionico. Cerchiamo di creare un modale semplice che mostri un messaggio e di uscire al clic del pulsante. Per farlo, per prima cosa creiamo la vista per il nostro modal.
Message.html
<ion-header>
<ion-toolbar>
<ion-title>
Modal
</ion-title>
<ion-buttons start>
<button (click)="dismiss()">
<span primary showWhen="ios">Cancel</span>
<ion-icon name="md-close" showWhen="android,windows"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding>
<h1>Modal Without Params is created successfully.</h1>
<button full (click)="dismiss()"> Exit </button>
</ion-content>
Message.ts
import { Component } from '@angular/core';
import { ViewController } from 'ionic-angular';
@Component({
templateUrl: 'build/pages/message/message.html',
})
export class MessagePage {
viewCtrl;
constructor(viewCtrl: ViewController) {
this.viewCtrl = viewCtrl;
}
dismiss(){
this.viewCtrl.dismiss();
}
}
Questa modale mostra un messaggio. Il modale può essere chiuso o “respinto” utilizzando la visualizzazione controller metodo di respingere.
home.html
<ion-header>
<ion-navbar>
<ion-title>
Modal Example
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<button full (click)="openModal()">ModalWithoutParams-Message</button>
</ion-content>
Home.ts
import { Component } from '@angular/core';
import { ModalController } from 'ionic-angular';
import {MessagePage} from '../message/message';
@Component({
templateUrl: 'build/pages/home/home.html'
})
export class HomePage {
modalCtrl;
data;
constructor(modalCtrl: ModalController) {
this.modalCtrl = modalCtrl;
this.data = [{name: "aaa", email: "[email protected]", mobile: "1234567890", nickname: "zzz"},
{name: "bbb", email: "[email protected]", mobile: "1234567890", nickname: "yyy"},
{name: "ccc", email: "[email protected]", mobile: "1234567890", nickname: "xxx"}]
}
openModal() {
let myModal = this.modalCtrl.create(MessagePage);
myModal.present();
}
}
Ora stiamo creando la nostra home page importando ModalController e il nostro modello di dati MessagePage. Il metodo di creazione di ModalController crea modali per il nostro modello di dati MessagePage che viene salvato per controllare la variabile myModal. Il metodo attuale apre la modale sopra la nostra pagina corrente.
Modale con parametri in chiusura:
Ora sappiamo come creare un modale. Ma cosa succede se vogliamo passare alcuni dati dalla modale alla nostra home page. Per fare ciò, esaminiamo un esempio con modale come Pagina di registro che passa i parametri alla pagina padre.
Register.html
<ion-header>
<ion-toolbar>
<ion-title>
Login
</ion-title>
<ion-buttons start>
<button (click)="dismiss()">
<span primary showWhen="ios">Cancel</span>
<ion-icon name="md-close" showWhen="android,windows"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
<ion-label>Name</ion-label>
<ion-input type="text" [(ngModel)]="name"></ion-input>
</ion-item>
<ion-item>
<ion-label>Email</ion-label>
<ion-input type="text" [(ngModel)]="email"></ion-input>
</ion-item>
<ion-item>
<ion-label>Mobile</ion-label>
<ion-input type="number" [(ngModel)]="mobile"></ion-input>
</ion-item>
<ion-item>
<ion-label>Nickname</ion-label>
<ion-input type="text" [(ngModel)]="nickname"></ion-input>
</ion-item>
</ion-list>
<button full (click)="add()">Add</button>
</ion-content>
Register.ts
import { Component } from '@angular/core';
import { ViewController } from 'ionic-angular';
@Component({
templateUrl: 'build/pages/register/register.html',
})
export class ResisterPage {
viewCtrl;
name;
email;
mobile;
nickname;
constructor(viewCtrl: ViewController) {
this.viewCtrl = viewCtrl;
this.name = "";
this.email = "";
this.mobile = "";
this.nickname = "";
}
dismiss(){
this.viewCtrl.dismiss();
}
add(){
let data = {"name": this.name, "email": this.email, "mobile": this.mobile, "nickname": this.nickname};
this.viewCtrl.dismiss(data);
}
}
Il registro modale ottiene l'oggetto dati con i valori inseriti dall'utente e i parametri vengono passati alla nostra pagina corrente in congedo con il metodo di licenziamento viewControllers. Ora i parametri sono inviati.
Quindi, come recupereremo i parametri nella home page? Per fare ciò, stiamo creando un pulsante sulla home page e chiamiamo Register modal al click. Per visualizzare l'utente, stiamo visualizzando un elenco.
home.html
<ion-list>
<ion-item *ngFor="let datum of data">
<h1>{{datum.name}}</h1>
</ion-item>
</ion-list>
<button full secondary (click)="openModalParams()">ModalWithParams-Register</button>
Home.ts
import {ResisterPage} from '../register/register';
openModalParams(){
let modalWithParams = this.modalCtrl.create(ResisterPage);
modalWithParams.present();
modalWithParams.onDidDismiss((result) =>{
if(result){
this.data.unshift(result);
}
});
}
Il metodo ViewController onDidDismiss viene eseguito ogni volta che viene chiusa una modale. Se i dati vengono passati come parametro da modale, possiamo recuperarli utilizzando il metodo onDidDismiss. Qui i dati inseriti dall'utente vengono aggiunti ai dati esistenti. Se nessun dato viene passato come parametro, il valore restituito sarà nullo.
Modale con parametri su create:
Passare i parametri a una modale è simile a come si passano i valori a un NavController. Per fare ciò, stiamo modificando la nostra lista in home.html per aprire una modale quando si fa clic su una voce di elenco e si passano i parametri richiesti come secondo argomento al metodo di creazione .
home.html
<ion-list>
<ion-item *ngFor="let datum of data" (click)="openModalwithNavParams(datum)">
<h1>{{datum.name}}</h1>
</ion-item>
</ion-list>
Home.ts
import {EditProfilePage} from '../edit-profile/edit-profile';
openModalwithNavParams(data){
let modalWithNavParams = this.modalCtrl.create(EditProfilePage,{Data: data});
modalWithNavParams.present();
}
Simile ad altre viste, usiamo NavParams per recuperare i dati inviati dalla vista precedente.
Edit-Profile.html
<ion-header>
<ion-toolbar>
<ion-title>
Login
</ion-title>
<ion-buttons start>
<button (click)="dismiss()">
<span primary showWhen="ios">Cancel</span>
<ion-icon name="md-close" showWhen="android,windows"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding>
<h2>Welcome {{name}}</h2>
<ion-list>
<ion-item>
<ion-label>Email</ion-label>
<ion-input type="text" value={{email}}></ion-input>
</ion-item>
<ion-item>
<ion-label>Mobile</ion-label>
<ion-input type="number" value={{mobile}}></ion-input>
</ion-item>
<ion-item>
<ion-label>Nickname</ion-label>
<ion-input type="text" value={{nickname}}></ion-input>
</ion-item>
</ion-list>
<button full (click)="dismiss()">Close</button>
</ion-content>
Edit-Profile.ts
import { Component } from '@angular/core';
import { ViewController, NavParams } from 'ionic-angular';
@Component({
templateUrl: 'build/pages/edit-profile/edit-profile.html',
})
export class EditProfilePage {
viewCtrl;
navParams;
data;
name;
email;
mobile;
nickname;
constructor(viewCtrl: ViewController, navParams: NavParams) {
this.viewCtrl = viewCtrl;
this.navParams = navParams;
this.data = this.navParams.get('Data');
this.name = this.data.name;
this.email = this.data.email;
this.mobile = this.data.mobile;
this.nickname = this.data.nickname;
}
dismiss(){
this.viewCtrl.dismiss();
}
}