ionic2 页面跳转 push() pop() NavController,navParams

新建页面http://zyyapp.com/post/185.html

Ionic 2之页面堆栈 :http://blog.csdn.net/u010730126/article/details/63254988

还记得Ionic 1中的state和router吗?他们两兄弟配合起来完成页面导航的功能,虽然它们使用起来并不算复杂## 标题 ##,概念也很清晰,不过当页面增多、state嵌套等问题出现后复杂度也会增加,当复杂程度到达一定程度时工程必然难以维护和理解。而Ionic 2效仿原生页面堆栈的概念解决了上述问题。

页面与组件

页面是应用的基石,是交互的基本单位,Ionic 2中页面是通过组件构成的,Ionic 2中实现了很多常用组件用于更快地构建应用,如Modal、Popup等。在理解Ionic 2之class及其修饰器@App、@Pipe中我们接触到了修饰器的概念,并且简单介绍了@App@Pipe的相关使用方式,使用组件也需要先使用修饰器@Component定义,下面是其基本使用方式:

import {Component} from ‘@angular/core‘;

@Component({
    templateUrl: "template.html"
})
export class PageName(){
    constructor(){

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

使用@Component首先需要使用import导入,并使用templateUrltemplate指定其页面构成。

页面堆栈

堆栈的概念大家都很熟悉,其基本原则是:先入后出。页面堆栈也不例外,可以将页面堆栈视为书箱,具体的页面视为不同的待放入书箱的书籍,每一次水平放入一本书,先放的书必然被后来的书“挡住”从而看不到了,想要重新看到就需要先将上面的书拿开。

其实Ionic 2中与其说是页面堆栈,不如说是组件堆栈,组件包括但不限于页面,而类似于Modal、Popup、Alert等相关的组件也是由堆栈维护的,下面提及的页面其实是组件的意思。

Ionic 2中使用NavController操作页面堆栈

// my-page.ts
import {Component} from ‘@angular/core‘;

@Component({
    templateUrl: "my-page.html"
})
export class MyPage(){
    constructor(public navCtrl: NavController) {
        // 使用this.navCtrl操作页面堆栈
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里创造NavController的实例是为了在类中任意地方都能够使用。

NavController最基本的就是“放书”的push操作和“拿书”的pop操作,其具体操作类似于Array:

push操作

push操作将一个页面放到页面堆栈的最顶层,使其对用户可见:

this.navCtrl.push(OtherPage);
  • 1
  • 1

使用push操作页面,只需要提供其页面组件的引用即可,当然首先要使用import将其导入:

import {OtherPage} from ‘../other-page/other-page‘;
  • 1
  • 1

页面间传值

大多情况下,页面之间需要通信,即页面之间需要进行数据传递,可以为push操作指定第二个参数作为页面间传递的参数:

// my-page.ts
this.navCtrl.push(OtherPage, {
    key1: value1,
    key2: value2
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

在OtherPage中可以使用NavParams获取到其他页面传至本页面的值:

// other-page.ts
import {Component} from ‘@angular/core‘;

@Component({
    templateUrl: "other-page.html"
})
export class OtherPage(){
    constructor(public navCtrl: NavController, public navParams: NavParams) {
        const data = this.navParams.data;
        const value1 = this.navParams.get(‘key1‘);
        const value2 = this.navParams.get(‘key2‘);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

pop操作

push对应的是pop操作,其实很多时候并不需要手动执行pop操作,Ionic 2中使用push操作时,导航栏上会加上返回按钮用于回到上一页面,也就是说pop操作会被自动执行。当然手动pop操作也是必要的,如用户注销需要跳转至登录页面等场景均需要手动调用pop操作:

this.navCtrl.pop();
  • 1
  • 1

总结

NavController的功能很多很强大,这里只介绍了其最基本的功能,请大家移步官方文档

参考文档:
理解Ionic 2之class及其修饰器@App、@Pipe
Ionic 2 NavController官方文档
Ionic 2 Component官方文档

时间: 2024-11-13 15:15:10

ionic2 页面跳转 push() pop() NavController,navParams的相关文章

多次页面跳转后pop回主界面的问题

最近写代码的时候出了点BUG, 查阅资料后终于解决了. 问题原因大概是: 项目中所有的viewController都是继承自一个封装好的viewController. navigationbar, navigationbaritem所有的方法都是大神自己写的.所以pop回主界面不知道怎么的会跳转到登录界面, 下面说我解决的方法: 比如先从A界面跳到B界面,再从B界面跳到C界面,最后需要从C界面直接跳转到A界面,在这里我讲讲解直接从C界面跳转到A界面的方法.在iOS开发中,我们通常用得最多的页面跳

控制器逻辑跳转Push Pop

最近开发新项目,是一个商城类型的项目,其中商品详情是我负责的,界面没什么好说的,右侧navbarItem的弹窗有跳转到首页的选项,把我虐死了,而且同事还在添加了一个中转控制器,刚开始完全懵逼了,后来才慢慢理清. 先说说Push和Pop,这两个方法就是对一个栈的操作,push是向栈里面压入控制器,Pop是出栈,把控制器弹出,在栈做顶层的控制器被显示在界面上.如果你的栈里面没有A控制器,你想Pop到A显然是不行的.Pop需要的是同一个栈内的控制器间的操作. push控制器就是把控制器压入栈内,一个对

ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a

参考:StackOverflow ios导航控制器UINavigationController,控制器a跳转(push)到b后,b跳转(push)到c,但c后退(pop)进入a.在b跳转(push)到c中代码书写如下: UINavigationController *navController = [[self.navigationController retain] autorelease]; [navController popViewControllerAnimated:NO]; View

页面跳转问题,多次 push 到新的页面的问题的解决方法

今日在做一个扫一扫的功能,突然发现多次点击了扫一扫的图片后,造成多次触发轻拍手势,就多次push到新的页面,本想在轻拍手势内对push的进行拦截,但是又觉得如果有好多的地方都要实现对该问题的解决岂不是很麻烦吗?于是想了一下,我们可以通过重写导航控制器的方法来解决这个问题. 下面就是我写好的方法,你可以直接引入到你的工程中,就能够解决类似的问题. (1).首先在程序的一个导航控制器类(就是程序中的所有导航控制器的父类名字一般都是:XXXBaseNavgationController )的延展中去遵

使用storyboard实现页面跳转,简单的数据传递

在storyboard中,界面的跳转是通过segue来实现的,利用它,省去了方法内写入跳转的代码. 一 视图跳转 <StoryBoard下的视图跳转> 我们知道:segue共有三种类型:push,modal,和custom.如下图://01 简单说下这三个的作用:使用导航栏压进新的控制器(push),模态的加载视图控制器(modal),自定义(custom). 好了,废话少说,现在开始我们的旅行. 1,首先建立一个Single View 模板的项目,记得勾选上storyboard.然后打开它,

混合开发的大趋势之一React Native之页面跳转

转载请注明出处:王亟亟的大牛之路 最近事情有点多,没有长时间地连贯学习,文章也停了一个多礼拜,愧疚,有时间还是继续学习,继续写! 还是先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android (最近还是保持日更,除非忙的起飞活着出去玩不然都是更的,不信你看) 废话不多,贴下运行效果 登陆前 登录成功后 部分代码借鉴:https://github.com/SpikeKing/WclNavigator rn的页面跳转都是交由Naviga

ios7 push pop 动画突然消失的解决方案

不想看扯淡的同学,直接拉倒底部查看.......... 这几天开发的程序遇到了这样的问题. 突然之前在ios7运行的程序全无动画效果. 系统自带的push pop之类的也完全没有动画效果,就好像view直接add上去的一样. 蛋疼.... 查看了下代码.. 完全不知道该如何下手了. 怎么办.. 百度 谷歌... 关键字:ios7 动画效果消失 出现如下界面... 这他妈是什么啊... 换谷歌.. 谷歌还是比百度靠谱,但是点进去发现.这也只是跟我一样出现了这些现象提出来的问题,但是解决方案呢,wh

关于页面跳转的几种方法与比较

跳转1.storyboard内的简单的跳转 在页面1内拖入一个button,右击button,连线到要跳转的页面 跳转2.storyboard内使用控制器之间连线的segue来进行跳转 在页面1内右键拖线到要跳转的页面内,然后给中间的连线,设置一个identifier, 在跳转的时候使用 [self performSegueWithIdentifier:"identifier" sender:nil]; 就实现跳转,并且还有prepareForSegue:(UIStoryboardSe

phonegap + 极光推送 + 页面跳转 (ios)

安卓的解决办法请参见这里:安卓解决办法 ios如果没有页面跳转的需求的话就使用极光推送,如果有页面跳转如果用了极光推送就只有用oc去写,但是我不会oc,所以智能放弃极光选用ios自己的apns来实现 新建项目跟安卓创建项目差不多,新建完成后就是初始话phonegap,注意在phonegap.local.properties文件中phonegap.platform设置为ios cmd移动到新建的项目的phonegap的文件夹下面安装插件: phonegap local plugin add htt